1. kaizen_nagoya

    Posted

    kaizen_nagoya
Changes in title
+C Puzzle Bookの有り難み、C言語規格及びCコンパイラの危険性を認識する5つ
Changes in tags
Changes in body
Source | HTML | Preview

C Puzzle Book, Alan-R-Feuer
https://www.amazon.co.jp/dp/4877830294/ 第二版翻訳
https://www.amazon.co.jp//dp/4871487733/ 初版翻訳

有り難み1 コンパイル可能なソース

C Puzzle Bookは、C言語規格ができる前から、C言語の理解困難性と、C言語のCPUの発展を阻害しないという姿勢を教えてくれる貴重な教材でした。
断片的なプログラムでは、C言語処理系(Compiler)およびC言語規格の実態を理解しないまま、空論に振り回されることがあります。

C/C++の国際規格案の例題をコンパイルするときの課題7つ。
https://qiita.com/kaizen_nagoya/items/5f4b155030259497c4de

C言語規格ができても、未定義、未規定、処理系定義という、大事な約束が続いています。C言語規格の断片プログラムでは分かりにくいことを、C Puzzle Bookの方式でコンパイルできる形にすると、最終的にコンパイルエラーにしかならない断片なのか、ある特定の条件では価値のあるソースなどかを確認するよい訓練になりました。

規格で定義しないということを決めている未定義。定義してしまったら、CPUの発展を阻害するかもしれない。
未規定は、複数の定義のうち、どれでなきゃいけないかということは規定しないという、これもCPUの発展と、既存のプログラムの振る舞いを制限しないという姿勢。
処理系定義は、そうはいっても、一つの処理系、一つのOSであれば、一つの定義でないと、ライブラリ等の整合性が取れなくなるため、一つはその処理系で決めて、利用者(programmer)には教えてねという要請。

有り難み2 出力

C Puzzle Bookのありがたみは、値を出力するプログラムだということです。

値を出力するプログラムまで到達すれば、なぜ、途中で未定義や未規定や処理系定義のことがあってもいいかとか、出力の違いが未定義や未規定や処理系定義に起因することが確認できることがあります。

有り難み3 16bitと32bitのint

16bit CPU用コンパイラと、32bit CPU用コンパイラの両立性(compatibility)は、長い間のC言語の課題でした。
今でも、16bit CPU用コンパイラの課題を確認するには、Open Watcomを利用するとよいでしょう。
その際、ソースコードはC Puzzle Bookがこれだけの量なのに、結構網羅的でした。

有り難み4 権威づけ

著者は、Programming Language Cを書いたK&Rや、
C Traps and Pit Falls(Cプログラミングの落とし穴)Koenigと同様AT&TのBell Lab.の方です。C puzzle bookを含めた3冊を読んで、コンパイルすると、C言語の立体的な視点が身につきます。文法、落とし穴、コンパイルできるソースで考えるという。なので、次の教育的効果があるのです。文法だけ、あら探しだけじゃなく、動くものを作る習慣。これがCプログラマに必要な素養だと。

翻訳も初版が村井純、第二班が田中正明(mruby)と

有り難み5 教育効果

本書を、C言語教育の際には、すべてのプログラマの人に、事前に出力を想定し、
複数のコンパイラ、複数のCPU、複数のOSでコンパイルして実行してみて、想定とすべてあっていたら、商品を差し上げることを約束してきました。
これまで、自分を含めて、数百人の方が挑戦され全問正解は一人もいません。
複数のコンパイラは、Visual C++とclangとか、gccとOpen watcomのように、時代、対象CPUの違い、16ビット32ビットの違い、OSの違いなど、複数の要因の違うものを推奨しています。