新・闘わないプログラマ No.328

Cの本2冊


前回書いたように、新人研修用のCのテキストを選定してたのですが、そのなかで見つけた最近出版のちょっと風変わりなCの本を2冊ばかり紹介します。ちなみに、どちらの本も自分でお金を出して買った本です…いや、会社で本を買おうとすると、申請してから下手すると数週間待って、それから発注して、なんてやたら時間がかかってしまうもので、とてもやってられなかったりするものですから。

まず1冊目は、藤本裕之著「叫ぶ! Cプログラマ プロが説くCのカラクリと落とし穴」(ソーテック社)です。余談ですけど、最近は他所のページで書籍の紹介してるところのリンク、Amazonのアソシエイト・プログラムなどを利用してるのをよく見かけますが、私はとりあえずいまのところやってません。こういうので商売(って言うほど大げさなもんじゃないけど)みたいなことするのに、いまいちまだ踏み切れないと言うか…などといいつつ、ここにある文章を本にしちゃって、少なくないお金(いや、多くも無いけど)が手に入ったりもしたわけで、いちいち拘るほどのものでも無いような気がしなくもありませんが、とりあえず考え中です。
と、話が横道に逸れてしまいました、その「叫ぶ! Cプログラマ プロが説くCのカラクリと落とし穴」です。近所の書店で、妙にインパクトのある表紙とタイトルで思わず手にとって、ぱらぱらと立ち読みしていたところ、唐突に私の出した本に言及している個所を発見してしまいました。で、どんな悪口か書かれているか怯えながら(←それは被害妄想です)買ってきました。
そして早速読んでみたのですが、内容もインパクトありまくりです。ここまで読み物に徹したCの本も無かったのではないでしょうか。と言うか「Cの本」と呼んでいいものかどうか。特に注釈部分が面白いです。著者の多岐にわたる豊富な知識に裏打ちされた、見事な脱線(?)。私なども、たとえばここで、コンピュータの話にからめながら他分野の話を混ぜて…などと考えることもあるのですが、はっきり言ってこれは難しいです。特に効果的に脱線させるのは、筆力と知識が必要なわけで、下手にやると「オレ、こんなことも知ってるだもんね〜」というあからさまな自慢話になってしまいます。
さて、この本は網羅的にCというプログラミング言語を解説しているわけではありませんから、Cを学ぶための教科書にはなり得ません。Cをある程度使っている人が「読み物」として読むのには面白いのではないか、と思います。書かれている内容・主張には、私は100%賛同できるというわけではありませんが、これは、著者の藤本さんも私の本を読んで同じような感想を持たれたようなのでお互い様と言っていいでしょう。と言うか、他人が自分と全く同じ考えを持っていたら、それはそれで気持ち悪いですからね。
いずれにしても、こんな系統の読み物的なプログラミング本、私も書きたかったかも、と悔しい感じもしないでもなかったり…そういう感じの本を出してもいいよ、という神をも恐れぬ出版社さんがありましたら、ぜひご連絡ください(←おい)。

2冊目は、柏原正三著「美しいCプログラミング見本帖」(翔泳社)です。タイトルと表紙に引かれて手にとってみて、「まえがき」の、

江戸の昔でも、甘党の人なら、日本茶でもいれて羊羹を食べながらひと休み、というのどかな光景があったのかもしれません。ちょっと井戸水を汲んできて、火でもおこしてといった具合に! 今では、ちょっと水道の蛇口をひねって、ガス栓をひねるだけで済んでしまいますが……。
ところで、ひねった蛇口をそのままにしたり、ひねったガス栓をそのままにするということは日常生活では考えられないようなできごとです。これは、誰しも生活常識というものを身につけているからです。しかし、Cプログラミングの最初には、このような、常識では考えられないようなできごとが次々と発生します。

というあたりに、「ある種のにおい」(←うまく説明できん)を感じて買ってきました。
で読んでみた(いや、実際には斜め読みですが)印象としては、いまいちかなあと。103個のテーマについてそれぞれ、問題のあるプログラムと解説、そして「美しい」プログラム、という内容で、Cの文法を一通りマスターした人向けに「美しいCプログラミング」を見せる、というコンセプトは悪くないと思うのですが、かなり無理やりなテーマも多いように感じました。たとえば、
「正しい方法でプログラムを終了しよう」(41ページ) → abort関数を使っている「悪い例」があって、それじゃなくてreturn文かexit関数を使いましょう、ってことなのですが、普通初心者がいきなりabort関数など使わないのではないかなあ、と。と言うか、私だってほとんど使った記憶がありません、abort関数。
「型やキーワードはすべて小文字で書こう」(54ページ) → キーワードを大文字で書いてコンパイルエラーになる例が載せてあって、それは小文字で書きましょ、ってことなのですが、これって文法レベルの話ではないかと。「美しいCプログラミング」とは関係無いように思えます。それと細かい突っ込みを入れると、悪い例のプログラムに出てくる基本型はキーワードに含まれますから「型やキーワード」と並列しなくてもいいのではないかというのと、そうじゃない型なら大文字にしても構わないというのと…いやもちろん著者が「型はすべて小文字にすべきである、それが美しいCプログラミングである」という主張をされているなら、それはそれでいいのですが、本文を読む限り、そうでも無さそうです。あれ? そういえばC99からは「_Bool」とか「_Complex」とか「_Imaginary」とか、大文字を含むキーワードも出来ましたね。
他にもいろいろありそうなのですが、私が見た範囲内で明らかにおかしいところを最後に一つだけ挙げておきます。
「ポインタ操作のポイント10 〜 void *型ポインタの型キャスト」(423ページ)で、「問題点 malloc()関数が返すvoid *型のポインタを使えない」「解決法 malloc()関数が返すvoid *型ポインタは型キャストして使う」ってのがありまして、いやあのその、void *型のポインタは任意のポインタ型の変数に(明示的な型変換無しで)代入できるんことが文法的に保証されているのですけど。C++だとダメだと聞いた事があったような(よく知らない)。この辺の話は「C言語FAQ」の「7章 メモリーの割り付け」あたりにわかりやすく書かれています。
そもそもポインタ型の変換(void *との間の変換は除く)が必要になる場合というのはそれなりに特殊な場合で、「コンパイラを黙らせるため」などと称して怪しげな型変換を多用するのは、バグの温床になりがちですし、そもそも「美しいCプログラミング」とは呼べないのではないか、と思います。
とまあ、結構言いたい放題いいつつ、件の本の奥付を見ると…あれ? 私の出した本を担当された同じ編集者さんではないですか。あははは、いやその…ねえ。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp