私のポリシー*1として、
- 何事にも半歩以上遅れて反応する。
- 意外とビーンボール気味。
が挙げられるようなので、今頃になって本を挙げてみる。
仕事でC言語を使う場合に基礎教養というかC言語にまつわるベーシックな部分で読んでおくべきだと思う本10冊だ。
ちなみに実際に仕事で使う場合は、少なくともこの他にライブラリなりシステムコールなりのリファレンスが必要。
あと「C言語にまつわるベーシックな部分」と書いたように、C言語いう括りなので以下のラインナップにしているけど、実際にはもっと広い範囲で本を読んでおかないとマズイ*2。
『明解C言語 入門編』
- 作者: 柴田望洋
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/08/30
- メディア: 単行本
- 購入: 17人 クリック: 184回
- この商品を含むブログ (42件) を見る
いや、C言語の入門書の中では間違いや抜けが非常に少ない本なのですよ。『やさしいC』なんてヌルポインタもNULLマクロも出てこないし……*3。
少なくとも定番の入門書の中ではこの本だ。
『C実践プログラミング』
- 作者: Steve Oualline,望月康司(監訳),谷口功
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 1998/06/15
- メディア: 大型本
- 購入: 7人 クリック: 158回
- この商品を含むブログ (46件) を見る
大抵のC言語の入門書はC言語の文法しか扱ってない。実際の開発で必要な要素が抜けているのだ。未経験で入ってきた新人が『新版 明解C言語 入門編』などで一通り文法を学んだ後に、試しにちょっとしたツールを書かせてみると散々な出来になる*4。
実際の所、「どんな文法があるか」だけでなく「その文法をどんな時にどう使えばよいか」という点も重要だ。それにC言語は文法以外に気にするべき要素がかなり多い言語でもある*5。その辺りをそこそこカバーしているこの本はおススメ。
『C言語ポインタ完全制覇』
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/01/01
- メディア: 単行本
- 購入: 22人 クリック: 147回
- この商品を含むブログ (75件) を見る
世の中には「ポインタなんてやめちまえ!」的な発言もある気がするけど、実際に仕事でC言語を使う場合にはどうしてもポインタを使うことになるので、覚悟しておくこと。
実際のところ、ポインタの概念自体は比較的簡単だ。例えダブルポインタやトリプルポインタになっても、紙に図でも書きつつ解読すれば何とかなる訳で*6、それよりも文法がヤヤコシイとか不慣れなのに無理して頭の中で解読しようとするとか、そういった点が問題を引き起こしているケースが多い気がする。
『CプログラミングFAQ』
CプログラミングFAQ―Cプログラミングのよく尋ねられる質問 (新紀元社情報工学シリーズ)
- 作者: スティーブサミット,Steve Summit,北野欽一
- 出版社/メーカー: 新紀元社
- 発売日: 2004/01/01
- メディア: 単行本
- クリック: 37回
- この商品を含むブログ (10件) を見る
なのでC言語を使っていて自分が疑問に思ったことの大半は、既に先人が解決済みな内容だと考えた方がよい。
この本のFAQの解答は comp.lang.c にて沢山のCプログラマの目に晒されて、長い間かけてアップデートされてきたものだ。下手にググるよりも、この本の目次を眺めた方が正しい答えに辿り着くと思う*7。
『エキスパートCプログラミング』
エキスパートCプログラミング―知られざるCの深層 (Ascii books)
- 作者: ピーターヴァン・デ・リンデン,Peter van der Linden,梅原系
- 出版社/メーカー: アスキー
- 発売日: 1996/03
- メディア: 単行本
- 購入: 17人 クリック: 404回
- この商品を含むブログ (78件) を見る
他の言語もそうだけど、C言語は特に掘り下げて理解しておくことが欠かせない部類に入ると思う。浅い理解で下手に使うと痛い目にあう。
『組込み開発者におくるMISRA-C:2004 C言語利用の高信頼化ガイド』
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド
- 作者: MISRA‐C研究会
- 出版社/メーカー: 日本規格協会
- 発売日: 2006/10
- メディア: 単行本
- クリック: 25回
- この商品を含むブログ (8件) を見る
MISRA-Cの解説書なので、各ルール1つ1つに対して解説やサンプルコードが付いている。読むべきなのはその解説部分で、
- どのような問題があるのか?
- その原因は?
- ルールを破ると何が起きるか?
- 解決策は?
といった部分が充実している。特に (1) はC言語の仕様や制約によるものが大半なので、組込み以外でC言語を使う場合にも注意すべき項目となる。
随所に『Cプログラミングの落とし穴 (新紀元社情報工学シリーズ)』への参照があるので、持っている人は2倍楽しめる(かもしれない)。
『S.P.ハービソン3世とG.L.スティール.ジュニアのCリファレンスマニュアル』
S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル
- 作者: 3世,サムエル・P.ハービソン,ガイ・L.,ジュニアスティール,3,Samuel P. Harbison,Guy L.,Jr. Steele,玉井浩
- 出版社/メーカー: エスアイビーアクセス
- 発売日: 2008/10/01
- メディア: 単行本
- 購入: 9人 クリック: 110回
- この商品を含むブログ (20件) を見る
元々コンパイラ開発から端を発した本なので、規格書代わりに多用しても何とかなると思う*9。
ANSI C89の範囲で十分なら『CユーザのためのANSI C言語大辞典』でもよい。
『C/C++セキュアコーディング』
C/C++セキュアコーディング (SEI SERIES・A CERT BOOK)
- 作者: Robert C. Seacord,JPCERTコーディネーションセンター
- 出版社/メーカー: アスキー
- 発売日: 2006/11/06
- メディア: 大型本
- 購入: 2人 クリック: 66回
- この商品を含むブログ (38件) を見る
とかく最近は組込み機器といえどもファイルを読むしネットワーク通信もする訳で、何となく90年代後半以降のWindowsのように、
といったような状況を追体験しているような気がする。
『定本 Cプログラマのためのアルゴリズムとデータ構造』
定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)
- 作者: 近藤嘉雪
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1998/03
- メディア: 単行本
- 購入: 11人 クリック: 169回
- この商品を含むブログ (77件) を見る
例えば私の周囲ではFIFO(リングバッファ)は良く使われる。時々連結リストも。まあどちらもヒープメモリを使わない実装だけど。
この本は基本的な部分しか扱っていない。より突っ込んだ所を勉強したい場合は別の本を読むことになる。
『プログラミング作法』
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
例えば「第2章 アルゴリズムとデータ構造」ではC言語でリスト、ツリー、ハッシュなどを実装している。また「第8章 移植性」にはC言語で複数プラットフォームに対応したコードを書くのに欠かせない内容が詰め込まれている。
現実にはこの本の内容を全てそのまま適用する訳にはいかないのだが*10、ただでさえ危険と隣り合わせなC言語を使うのだから、バグ低減の第一歩として良いコードを書くようにして欲しいところだ。
*1:単なる癖ともいう。というか絶対ポリシーではない。
*2:本を読むだけでなく、コードの読み書きも必要だけど。
*3:確認した限り、第2版と第3版にはでてこない。
*4:全部main()に書いてあるとか、データを構造体に纏めずに個別の配列に格納しているとか、構造体のオブジェクトをそのままfwrite()で書き出すとか、コメントが全く書いてないとか、逆に1行1行事細かくコードの中身をコメントで反復しちゃうとか……。
*6:慣れれば紙に書かなくても脳内イメージで理解できるようになる。
*8:厳密にはバージョンではないが、K&R/C89〜C95/C99のこと。
*9:もちろん厳密な所を調べるなら規格書。