C言語の理解度を突いてみる

Cが使えると自称する人で、本当にC言語の意味を理解できてる人はわずかだったりします。

というかリファレンスマニュアル等を見たことが無い人も多かったりするし、かれらが参考にしたリソースが仕様を理解して書かれているかどうか怪しいものも多い。

実装があいまいだった(もうだいぶ)昔とは違い、いまはISO標準であるわけで、仕様について知っておくべきだと思います。実践から入っていて言語自体の知識はこれからなのはともかく、仕様や標準を調べること自体もしようとせずに、過去のコードがそう書かれているから、や、それでも動くから等の理由で開き直るようなのは問題外だよなあ。

上記の例でさえも、あやふやな人は多いでしょう。
さらに突くポイントには以下のようなものが考えられます:

  • ラベルつき文
    • ラベルが、文(宣言文以外)に付随するものだということ、そのもの
  • switch文
    • 続くのがブロック文でなくてもいいこと。単文、if文、while文などでもいい。
    • caseやdefaultもラベルつき文であること、defaultが最後である仕様でも無いこと
    • 分岐もほぼgotoセマンティクス
  • ビットフィールド、バイトオーダー、アラインメント、セグメント

大半は「エキスパートCプログラミング」に書いてある内容です。

エキスパートCプログラミング―知られざるCの深層 (Ascii books)

エキスパートCプログラミング―知られざるCの深層 (Ascii books)

リファレンスとしては、ISO C99やClean Cにも対応している「Cリファレンスマニュアル第五版」(訳しすぎな面も多いけど)も持っているとよいでしょう

S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル

S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル

最後に、必読書として「プログラミング作法」もあげておきましょう

プログラミング作法

プログラミング作法