C言語の入門書を読む:『やさしいC 第2版』

諸事情により今更ながらC言語の入門書を色々と漁っている。それも簡単なやつ。

基準は(曖昧且つ主観的だけど)こんな感じ。

  • プログラミング入門も兼ねている。
  • プログラミング初心者が途中で投げ出してしまわない程度に分かりやすい。
  • 上記目的の為にオミットされている部分があってもOK。その点は2冊目の本でカバーしてもらう。

まあ2段構えですな。2冊目の本は『明解C言語 入門編』で、理由は「誤った記述が少ない」との定評があるから。

しかし如何せん『明解C言語 入門編』はまったくの初心者には難しいので、もう少しやさしい本を探している。*1

現状、とりあえず2冊の候補が挙がっている。中身をチェックしようと思いつつも他の用事やら何やらで全然進んでなかったのだが、いい加減そろそろ先に進めようということで、まず1冊読むことにした。

今回読むのは『やさしいC 第2版』。なぜ第3版じゃないのかというと、大人の事情というか、お金の面で都合が良いから*2。まあ中身的に微妙なら、多少はお金がかかっても他の本を購入してもらうけど。

そこそこ厚い本で、本筋の部分だけで430ページぐらいあるので、読めるところまで読んでみた。

Lesson 0?

MS-DOSプロンプトや開発環境等の使い方が書かれている。このあたりはVisual C++ 2008 Express Editionを使うことになるのでスルー。

Lesson 1 はじめの一歩

「プログラミングって何?」という所から始まり、サンプルコードを真似して書いて、ビルドして、実行するところまで説明している。特に問題はなさそう。

ただP.9に「オブジェクトファイルをリンクする」という項目があるけど、分割コンパイルとかしてない段階でこんなことを言われてもピンとこないかも。*3

Lesson 2 C言語の基本

書いてあったこと。

  • 簡単なプログラムを例にCのプログラムの基本的な構成要素の説明
  • printfの基本的な使い方
  • 文字/文字列/数値(整数、実数)について

問題なさそう……いや「『int main(void)』のintとかvoidって何ですか?」って聞かれる可能性はあるな。注意しないと。

Lesson 3 変数

書いてあったこと。

  • 変数/識別子/変数の型って何?
  • 変数の使い方
  • キーボードから入力されたデータを取り込む方法

基本的には問題なし。

3.3 型

変数の基本型のサイズと記憶可能な値の範囲の一覧表(P.49の表3-1)がある……。もちろん次のページに、

なお、C言語の基本型のサイズは、開発環境によって異なる場合があります。表3-1に示した「サイズ例」と「記憶できる値の範囲例」はめやすとして考えてください。

と書いてあるけど……順番的に「C言語の基本型のサイズってこの表の通りなんだ」なんて誤解される可能性がありそうなので、ちょっと注意しないと。

順を追って最後までしっかりと読んでくれれば問題ないけど、中途半端に読み飛ばされる可能性が無いとは言い切れないのが辛いところ。

3.6 キーボードからの入力

個人的にはscanfを使うサンプルは嫌いなんだけど、こればかりはどうしようもないんだろうか? まあP.69に、

実際のプログラムを作成するにあたっては、ユーザーの入力ミスを考えて、コードを記述しなければならないことを忘れないでください。

と書いてあるだけマシなんだろうけど。

Lesson 4 式と演算子

書いてあったこと。

  • 式/演算子って何?
  • とりあえず実際に演算してみる
  • 演算子の種類、よく使う演算子の説明
  • 演算子の優先順位、結合規則
  • 型変換、キャスト、異なる型同士の演算

だいたい問題なし。

4.1 式と演算子

式とか「式の評価」についてしっかりと書いてある点が、個人的に高ポイント。どこかの本に「C言語は式言語としての性格が強い」みたいなことを書いてあった気がするけど、どの本だったかなあ?*4

4.2 演算子の種類

今更ながら、「式の評価」について押さえていれば、インクリメント/デクリメントが前置と後置で挙動が違うことの説明がしやすくなるかもしれないことに気づいた。副作用の発生するタイミング云々の話じゃなくて、単に式を評価した結果として返される値が違うだけなんだよなあ。

シフト演算についても書かれている。良いと思うけど、このタイミングで大丈夫だろうか?

4.4 型変換

暗黙の型変換の規則の表か何かがあるとよかったのだが。

サイズの小さな型の変数に大きな値を代入した場合の例(P.103)で、int型の変数にdouble型の変数を代入しているのは微妙かも。shortにlongの値を代入して「妙な結果になったでしょ?」とする方がいいような……。

Lesson 5 場合に応じた処理

書いてあったこと。

問題なし。

Lesson 6 何度も繰り返す

書いてあったこと。

  • for
  • while
  • do-while
  • break、continue
  • 文のネスト
  • (おまけで)goto

ほとんど問題なし。

少しだけ気になったのはP.152で、

for(i=0; i<=5; i++){
試験を受ける
}

 for文の処理では、変数iが1から5まで増えていく間に、試験を受けることを繰り返します。(以下略)

実際には、最終的にiは6になるんだよな……。その辺りをフォローしないと。

Lesson 7 配列

書いてあったこと。

  • 配列とは?
  • 配列の使い方
  • 配列のソート、多次元配列
  • 文字列と配列

おおむね問題はないけど……。

7.4 配列の記述のしかた

本筋とは関係ないけど、P.194のマクロ定数の例で、マクロ名がNUMなのはちょっと微妙。

7.5 配列の応用

なぜか配列のソートの話が……。正直要らないかも。多分これ、基本選択法だよな。

基本情報技術者を受ける場合は基本交換法(バブルソート)・基本選択法基本挿入法+αをセットで覚えなきゃダメだし、実業務の場合は「(問題がなければ)qsort使え」って話になりそうだもん。

やさしいC 第2版

やさしいC 第2版

今日はここまで。残りは半分ぐらいだけど、関数/ポインタ/構造体といった大物が控えている。気を引き締めなければ。

*1:個人的には『C実践プログラミング 第3版』とかオススメだけど、これも微妙に2冊目のC言語本っぽい。

*2:第2版なら購入しなくても何冊か用意できる当てがあるので……。

*3:hello, worldでもリンクされるCランタイムライブラリの存在って、人によっては気づかないままかもしれないし。

*4:2008/12/22: 『エキスパートCプログラミング』序章の「2000万ドルのバグ」(P.24)に書いてあった。