LoginSignup
2
3

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識, error(21), coding(28)

Last updated at Posted at 2018-01-21

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

Cパズルブック
改訂版, Alan R. Feuer/アラン・R. フューアー 2000-12
51QQZNVK6JL._SX374_BO1,204,203,200_-3.jpg

https://www.amazon.co.jp/dp/4877830294/
https://bookmeter.com/books/1357557
https://booklog.jp/item/1/4877830294

<この項は書きかけです。順次追記します。>

有り難み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を利用するとよいでしょう。
http://www.openwatcom.org

はC Puzzle Bookのソースコードがこれだけの量なのに、網羅的であることに驚きました。

最近では、ほとんどの処理を32bitCPUで行い、16bit CPUとの価格差がなくなると、16bitで処理する必要性が省電力くらいになっているかもしれません。

もし、すべての処理を32bit CPUで行うのであれば、16bitと32bitの違いを意識する必要はなくなるのかもしれません。逆に64bitと32bitの違いを整理しておく必要があるでしょう。

有り難み4 権威づけ

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

翻訳も初版がIPv6で著名な村井純(ipv6)さん、第二版がmrubyで著名な田中正明が翻訳されている。

The KAME project
http://www.kame.net

NPO 軽量Rubyフォーラム
http://forum.mruby.org

有り難み5 教育効果

本書を、C言語教育の際には、すべてのプログラマの人に、事前に出力を想定し、
複数のコンパイラ、複数のCPU、複数のOSでコンパイルして実行してみて、想定とすべてあっていたら、商品を差し上げることを約束してきました。
これまで、自分を含めて、数百人の方が挑戦され全問正解は一人もいません。

複数のコンパイラは、Visual C++とclangとか、gccとOpen watcomのように、時代、対象CPUの違い、16ビット32ビットの違い、OSの違いなど、複数の要因の違うものを推奨しています。

SWESTでも、何度もMISRA Cの講演、演習を実施しています。
その際に、C Puzzle bookのように出力するプログラムで検討することの大事さを説明しています。

そして何よりも、C Puzzle bookを翻訳された田中和明さんがSWESTの実行委員にいることが鍵かも。

misra_c.h
#include <stdio.h>
...

Lode Runner

C puzzle Bookがすぐにできて、Cコンパイラ写経まではできそうにない場合は、ゲームの写経をお勧めしています。

Lode-Runnerで学ぶ実践C言語-ビー・エヌ・エヌ企画部
51JaGIOM+4L._SL500_SX351_BO1,204,203,200_.jpg

人生で影響を受けた本100冊。

80. Cパズルブック

改訂版, Alan R. Feuer/アラン・R. フューアー 2000-12
51QQZNVK6JL._SX374_BO1,204,203,200_-3.jpg

C言語教育の際に、このパズルブックを必ず解いてもらっている。
サンプルを見て、結果が何になるかを予測しれもらい、
実際にコンパイルして結果を見て、なぜ、予測と違うかを確かめてもらっている。
全問正解したのは、いまだに誰もいない
#include
つまり、C言語の間違えやすいところを、パズル形式で解説しているため、
C言語の初心者から、上級者と自分では思っている人まで、
幅広く利用するとよい本である。
ポインタ、構造体の間違えやすい点を示すよい教材であると考え、
10年以上、紹介してきて評判もよい。
仕事でC言語を利用することがあるなら、1度は解いてみてください。

ISO/IEC 9899
http://www.open-std.org/jtc1/sc22/wg14/

Cパズルブック 
https://qiita.com/kaizen_nagoya/items/408869e685d8b6272fce

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>

参考文献

日本のプログラマが世界で戦える16分野・事例。仮説(53)統計と確率(25)
https://qiita.com/kaizen_nagoya/items/a7e634a996cdd02bc53b

コンパイラを書くのは難しいか。仮説(175)
https://qiita.com/kaizen_nagoya/items/a87c65d487bc7a67da11

C言語(C++)に対する誤解、曲解、無理解、爽快。
https://qiita.com/kaizen_nagoya/items/3f3992c9722c1cee2e3a

人生で影響を受けた本100冊
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

SWESTのまとめ
https://qiita.com/kaizen_nagoya/items/62e56ae151554d6200c0

C++ Support(0) 
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Ethernet 記事一覧 Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48)
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網(Wi-Fi)空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

OSEK OS設計の基礎 OSEK(100)
https://qiita.com/kaizen_nagoya/items/7528a22a14242d2d58a3

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え(0)一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

TOPPERSまとめ #名古屋のIoTは名古屋のOSで
https://qiita.com/kaizen_nagoya/items/9026c049cb0309b9d451

docker(0) 資料集
https://qiita.com/kaizen_nagoya/items/45699eefd62677f69c1d

Qiita-dockerお宝鑑定団
https://qiita.com/kaizen_nagoya/items/509e125263559b5aed5b

The C++ Standard Library: clang++とg++でコンパイルしてみた(まとめ):14件
https://qiita.com/kaizen_nagoya/items/9bdfaa392443d13e5759

C++17 - The Complete Guide clang++とg++でコンパイルしてみた(まとめ):4件
https://qiita.com/kaizen_nagoya/items/c000f307e642990781e1

C++N3242, 2011, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/685b5c1a2c17c1bf1318

C++N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) Example code compile list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

C++N4741, 2018 Standard Working Draft on ISO/IEC 14882 sample code compile list
https://qiita.com/kaizen_nagoya/items/3294c014044550896010

C++N4910:2022 Standard Working Draft on ISO/IEC 14882(0) sample code compile list
https://qiita.com/kaizen_nagoya/items/fc957ddddd402004bb91

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

プログラマによる、プログラマのための、統計と確率のプログラミングとその後 統計と確率一覧(0)
https://qiita.com/kaizen_nagoya/items/6e9897eb641268766909

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>
This article is an individual impression based on the individual's experience. It has nothing to do with the organization or business to which I currently belong.

文書履歴(document history)

ver. 0.01 初稿  20180112
ver. 0.02 参考文献追記 20221023

最後までおよみいただきありがとうございました。

いいね 💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚 and follow me for your happy life.

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3