Phinlodaのいつか読んだ本

実際に読んでみた本の寸評・奇評(笑)

Cの絵本

今日は「Cの絵本」プログラミング言語Cの入門書ですが、絵本というほど絵はないですね。挿絵程度です。

入門用としては悪くはないと思います。サンプルプログラムを実行しながら勉強すればいいのですが、サンプルがちょっと面白くないかもしれません。昔、C言語の入門記事を書いていた頃、そのような所は特に気を付けていたのですが、実際に書いてみるとなかなか難しいのです。

ざっくりしか読んでませんが、気になったところをいくつか指摘しておきます。

【文字列】

'\0' の説明が次のようになっていますが、

NULL(ヌル)文字
(p.14)

これは次のように、ナル文字 (null character) が正しいです。

すべてのビットが0であるバイトをナル文字 (null character) という。
(JIS X 3010 5.2.1)

【論理演算子

&& の使い方として、

a が 50 以上 100 未満である
(50 <= a) && (a < 100)
(p.29)

これは、個人的意見としては「間違い」です。正しくは、

a が 50 以上 100 未満である
(a >= 50) && (a < 100)

または、

50 が a 以下かつ aが 100 未満である
(50 <= a) && (a < 100)

と書くべきです。この本に出てくるような書き方はバグの原因になることがあるので推奨しません。プログラムを書く時の大原則として、表現したいことはその通り書くべきです。

aが50以上

という条件なら、

a >= 50

と書くべきでしょう。

演算子の優先順位】

式の中に複数の演算子が含まれる場合、C言語では次の優先順位に基づいて計算します。また、同じ順位の演算子が並んでいるとき、式の左右どちらから適用していくかも決まっています。
(p.36)

この表現は猛烈に誤解を招くと思われます。例えば、関数 f()、g()、h() があるときに、

f(a) + g(a) * h(a);

を実行すると、各関数を呼び出す順序は決まっていません。この本の表現だと、g、h、f の順に実行すると誤解してしまいそうです。

【if文】

if ('0' <= c && c <= '9')
    printf("数字です。\n");
else if ('a' <= c && c <= 'z')
    printf("小文字です。\n");
else if ('A' <= c && c <= 'Z')
    printf("大文字です。\n");
else
    printf("記号です。");
(p.44)

これは、

if ('0' <= c && c <= '9')
    printf("数字です。\n");
else
    if ('a' <= c && c <= 'z')
        printf("小文字です。\n");
    else
        if ('A' <= c && c <= 'Z')
            printf("大文字です。\n");
        else
            printf("記号です。");

ではないのか、という疑問を持つ人はいないのだろうか。

【無限ループ】

これを無限ループといい、プログラムのバグ(不具合)の1つです。
(p.49)

バグと決めつけなくても…(笑)

【NULL】

NULLポインタ
(p.72)

規格上は空ポインタという言葉ですが、慣習的に NULL ポインタと呼ぶ方が圧倒的に多いと思います。


Cの絵本 第2版 C言語が好きになる新しい9つの扉
株式会社アンク 著
翔泳社
ISBN: 978-4798150383