わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Cの新刊

プログラミング学習シリーズ C言語改訂版 2 はじめて学ぶCの仕組み

プログラミング学習シリーズ C言語改訂版 2 はじめて学ぶCの仕組み

JavaプログラマのためのC作法 虎の巻

JavaプログラマのためのC作法 虎の巻

どちらも面白い本です.Cのコードを書く際につまずきやすい点を取り上げ解説しています.入門書ではないのですが,当学科の悩み多き2年生あたりが,夏休みや春休みに,Cの文法を復習したいときに読むと,良さそうです.後者は書名に「Java」が含まれていますが,まずCの説明のところ読み,Javaを授業で学んでから,全体を読み直すというのも,勉強になると思います.
ただし,「悩み多き」と言っても,リアルタイムで取り組んでいる課題の中で,自分の期待する動作になるようどう書けば良いかという悩みには,必ずしも答えてくれるとは限りません.
これらから学んだことを並べます.出典について,「はじC2」「C作法」と書名を略記しています.

  • sizeof("hello")は6.つまり,文字列リテラルは配列*1.(はじC2 pp.26-28)
  • 関数ポインタの変数定義時に引数情報を書かないことで,その変数を使って,異なる数の引数を与えて呼び出せる.(はじC2 pp.218-222)
  • どうやらmallocの結果をポインタ変数に代入する際のポインタ型のキャストは不要らしい.(はじC2 p.231他,C作法 p.42他)
  • C89でint型変数hogeに-2147483648を格納したいとき,「int hoge = -2147483647 - 1;」*2.(C作法 p.28)
  • Cのfor文で,複数の変数に初期化や増分を書くときの「,」は演算子なのに対して,Javaのそれは構文規則として定められている.(C作法 pp.47-48)
  • strncatは,連結のバイト数にかかわらず,必ず最後に '\0' がつく.(C作法 p.121)
  • typedef struct { (略) } Person, *PPerson;のように書くと,一つの宣言で複数の型名が定義できる.(C作法 p.146)

この2冊は,Cの面白いところを伝えることを仕事とする人*3にとっては宝の山です.深く読み込み,他書と比較検討してから,また取り上げることにします.

*1:ただし,その値の変更はできません.

*2:Linuxの/usr/include/limits.hを覗くと,「#define INT_MIN (-INT_MAX - 1)」「#define INT_MAX 2147483647」とありました.

*3:もったいぶった表現をしていますが,要は私のことです.数日前のエントリに「石橋を叩いても渡らないと称される慎重派の人」と書きましたが,あれも,高校のとき進路指導で「君は石橋を叩いても渡らない性格だから」と言われたことがあったのでした.