『Cプログラミング専門課程』目次第0章準備

準備 ■著者の意図


C言語関係の本が何冊出版されているかご存じですか。大手書店に行けば本 棚何本分もあり、どの本を買うべきか迷うでしょう。情報・経営工学書図書目 録に載っているのだけでも300冊以上あります。こんなとんでもないところ に、私は、また1冊C言語の本を追加しようとしています。出す以上は読まれ たいし、売れれば私には印税が入ってきます。ほとんどの本が何の評価もされ ず埋もれていくわけですが、そんな仲間入りをするのでは書く気も起きません し、そんな本を買うのはババをつかまされたようなもので、読者に気の毒でも あります。

幸いにも私は、他人の書いたCプログラムを既に50万行以上見てきました。 十万行を超えるC言語で書かれたプロジェクト何本かの相手をしたので、総計 がその程度には軽くなっているでしょう。上手なプログラムも少々はありまし たが、大部分は下手なプログラムでした。上手になるには上手なプログラムを 読むに限ると言われていますが、下手なプログラムを大量に見るにつけ、どう もそれだけではいけないのではないかと思うようになりました。下手な中にこ そ問題点が存在し、その問題点をきちんと分析することで初めて、下手の下手 たる由縁が分かるのではないでしょうか。

プログラミングにおいて一番問題になるのが「バグ」で、このバグにこそプ ログラマの欠陥が凝縮されて入っています。今までにもバグに関する本は数多 く出版されました。大抵の本がバグを類別し、バグの理由を説明をし、直し方 を示しています。この種の本は昔から多く出されていますし、結構売れている ようなので読まれているのでしょう。

しかし、実際に開発されたプログラムを見ていると、どう考えてもバグ退治 の効果は出ていないとしか考えられません。目を被いたくなるようなプログラ ムに出会うことは日常的なことですし、できればそのようなプログラムからは 無関係でいたいと思っています。仕事か義理かでもなければとっくに逃げ出し たいと思っていましたが、そういうプログラムに限ってプログラマは極めてク ソまじめで、「努力の塊」みたいな方が多いのです。でも、プログラムの方は 「バグの塊」です。

こういうプログラムでも、当方に一切関係なければ笑って見ていられるし、 酒の肴には好適なのですが、コンピュータがあらゆる分野で使われるようにな り深刻な事態も生じてきます。自動車はもちろん、新幹線や飛行機などの大量 交通機関にも使われたり、マイクロコンピュータをいっぱい使った高度医療機 器による治療が一般的になりつつある今日、プログラムのバグは生命の危険に さえつながります。

C言語の代わりに英語を考えてみましょう。どちらも、あるルールに基づい て語を組み合わせて表現します。英語の場合は英文法に従って文を書けば、文 法的には正しい文ができます。しかし、情報を伝え合うという基本的な目的か らいうと、英文法だけではどうにもなりません。日本の英語教育は英文法偏重 で、文法には強いがコミュニケーションができないとんでもない人間を戦後だ けで既に1億人ほど生産してまいりました。実際に情報を授受するには、語彙、 発音はもとより、見ぶり手ぶりから文化的背景までが重要になります。そうい うもろもろの物が全部ぐちゃぐちゃに集まってやっと英語を理解できるように なります。

C言語も全く同じです。C言語の文法は、入門書に十分すぎるぐらい丁寧に 書かれています。読者の方々は、少なくとも1冊以上読んだでしょう。でも、 それらは文法の説明に過ぎない場合がほとんどです。C言語はコンピュータが 理解する言語で、コンパイラが解釈し、CPUへの命令に翻訳します。このとき、 C言語を文法として理解しているだけでは、ほとんどC言語を使いこなすこと はできません。C言語がどういう機構で動いているかが少しでも分かってくる と、C言語を肌で感じ取ることができ、身についてきます。

本書では、C言語の機構を中心にすえ、その機構を誤解するとどのようなバ グが発生するかを説明するスタイルをとっています。その機構の中心になるの が「メモリ」です。本書は、C言語を「メモリ」という面と「バグ」という2 面から解析し、Cの本質をさらけ出すように試みました。C言語は、特別な魔 法のような言語ではありません。訳も分からずに使っているのと、訳が分かっ て使うのには大差があります。大差どころか、極めて危険で、実用に供するよ うなプログラム開発には、そのような違いも分からないプログラマを絶対参加 させてはいけません。

本書の目的は、「訳が分かってCのプログラムが書ける」ようになるレベル まで導くことです。もちろんプログラミング技術にはさらに先があるので、そ の後の研鑽は当然必要です。プロジェクトレベルの開発技術は非常に重要です が、これについては一切書いていません。1冊で何でも書いてしまえば、結局 何も吸収できないだろうし、説明も浅くなってしまいます。

本書は一気に読み飛ばすのは中級者以上でも難しいところがあります。内容 的に難しいのではなく、実例主義に徹したため、きちんとプログラムを追いか けないと分かりません。例えば、配列の開始アドレスがちょうど1000 番地に なることは万一しかなく、そういう現実にありもしない例による説明を避けた ため、きりの悪い値がいっぱい出現しますが、プログラミングとは実際そうい うものです。

一気に読めてしまう本では、知識も頭に残らず、価値もあまりないでしょう。 読んで納得し、できれば自分のコンピュータで実験していただきたい。そうす れば本当にCの動きが実感でき、さらに体感できるでしょう。

もう1つの特徴は、本書では網羅的に説明することを止めたことです。解説 していない部分は随分あります。例えば、共用体、ビットフィールド、可変個 引数関数などがあります。また、コンピュータシステムに依存する入出力関数 などトラブルになりやすい部分も全部省略しました。とにかく、C言語の本質 の理解に的を絞っています。絞り過ぎと言われるかも知れないくらい絞ったの は、目的をはっきりさせ、成果を上げることを目指したからです。総花的にす るのは、わざわざ避けたのです。それでもかなり総花的になってしまった感が あります。

本書を読むことで、「Cって、こうやって動作しているのか」と分かってい ただくことが本書の最終目的です。それも、アセンブリ言語を理解することな く分かることです。


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング専門課程』目次第0章準備