B.W.カーニハン , D.M.リッチー , 石田晴久 / 共立出版
全ての原点、ビッグバンな本
いわゆるCの原典。著者の頭文字を取ってK&Rと呼ばれます。
C言語を作ったデニス・リッチーとブライアン・カーニハンが、1978年に出版した最初の解説本です。
全てはここから始まった歴史的一冊です。
いわゆる「hello, world」プログラムの初出でもあります。
今でも読み返すと時々新しい発見があり、その奥深さに気付きます。
また、設計思想を感じ取ると、文章の裏にカーニハンとリッチーの人間味が見え隠れします(翻訳ですが)。
これは歴史の証人だ
と、いきなり持ち上げましたが
いかんせん書かれた時期が時期なので、現在では理解しにくい事が多少あります。
例えば、ポインタ演算ヒャッハー!な所とか、配列と引数の関係とか…
とは言えそれは仕方ないでしょう。
本書が出版された1978年は昭和53年、巨人の王貞治選手(現ホークス会長)が現役だった頃です。
携帯電話もDVDもCDもなく、喫茶店に行っただけで不良生徒扱いだった時代です。
そんな時代に生まれ、今もなお売れ続けるロングセラー。
日本だけで発行部数は48万部!技術書としては怪物的です。
中級者以上なら見栄を張ってでも持つべき一冊。
また古いからこそ、当時を知るタイムマシーンとしてもオススメしたいです。
やさしくない入門
ただし、本書を入門用にするのは止めた方が良いです。
多分混乱します。
最初の「やさしい入門」が全くやさしくないので、挫折する可能性大です。
おそらくコンピューターサイエンスの下地がある人向けなんですね。
また前述の通りポインタ演算を多用するのも、現在ではオススメできません。
初心者時代にヤバい癖が付いちゃいます。怖い怖い。
正しい使い方はコレだ!?
さて個人的な意見ですが、この本の正しい使い方は下記の通りです。
- 中級以上の人が、C言語の内部構造を学ぶ
- 時々読み返すことで、理解が深まる
- リファレンスとして使う
- 読みながら20世紀に思いを馳せる
- 本棚の見える所に飾って、一人で悦に入る
- 教室や電車で読むふりをしてドヤる
ちなみに一番下は、私の黒歴史です…
おまけ:本書の萌えポイント
1 余計なセミコロン
この121ページの一文は、最も有名なミステリーでしょう。
関数定義の仮引数としては
char s[ ];
および
char *s;
はまったく同一である。
関数定義の仮引数なのに、なぜか「;」があります!
このせいで、同じ規則が変数宣言にも当てはまる、という誤解が生まれましたとさ。
2 え、何それは…
さらに続く121~122ページにも、不思議な記述があります。
配列名が関数に渡されるときに、関数ではそれが配列として渡されたのかポインタとして渡されたのかを都合のよい方に判断して、それに応じて操作が行われる。
うん、なるほど、わからん。
素直に読むと、JavaやC#のような仕様だと錯覚しそうです…
好意的に解釈すれば「配列の場合はポインタに読み替える」事を指すのかな??
どちらにせよ、誤解を招きそうで怖いです。
3 にんげんだもの
148ページ「5.12 複雑な宣言」は、意味深な一文から始まります。
Cの宣言の構文、とくに関数へのポインタを含む部分は酷評を受けることがある。
(中略)難しいものは混乱のもとになる。
解説に先立って「これ難しいかもね」と、欠点を認めつつ、断りを入れてくれます。
なんというか、デニス・リッチー氏の優しさを感じるポイントです。