第9章 演習問題2 ~関数atoiを作ってみる~
休憩室
この章で、K&Rという名前が出てきましたね。
K&Rは、C言語の初期開発者である、
Brian KernighanとDennis Ritchieによって書かれたC言語のバイブル的存在です。
ANSIによる標準化以前、Cコンパイラの各メーカーは、
このK&Rに何%まで準拠しているかを宣伝文句にしていました。
では、K&Rと、ANSIによる標準化以降では、一体、何が変わったのでしょうか?
ANSIになって一番大きいのが、関数プロトタイプ宣言の導入です。
プロトタイプ宣言は、関数を呼び出す時に、引数の型、
および引数の数のチェックをするためにあります。
しかし、K&Rの頃は事実上、引数のチェックを目的とした
プロトタイプ宣言はありませんでした。
プロトタイプ宣言がない時の危険性は、前の章でも触れましたね。
つまり、K&Rの頃は、間違いが起こりやすい、とても危険な状態だったのです。
後は、細かいところでは、5章で習った、文字列の折り返しなどがあります。
printf(“ああああああああああああああああああああいいいいいいいいいい”
“いいいいいいいいいいうううううううううううううううううううう”);
よく、main関数の前に付いているvoidも、ANSIで導入された型です。
voidは、英語で空っぽという意味です。
ですから、void main()は、戻り値を何も返さないという意味の宣言になります。
その場合には、戻り値を指定することはできません。「return;」のみを記述します。
また、enum型(研修中は使いません)というものが、正式に採用されました。
その他、皆さんが知らないものでは、構造体の一括代入が可能になった、
共用体の初期化が可能になった、自動配列の初期化が可能になった、
#を行頭から始めなくてよくなった、#defined演算子の追加、##演算子の追加などがあります。
今のところ、皆さんが意識する必要はありませんが、
古いコンパイラを使うと、自分では正しい文法のつもりでも、
コンパイルエラーが出ることがあります。
そういう時は、ANSIに対応したコンパイラかどうか、調べてみることです
(エス・ジーの社内だと、SunOS 4.Xと言われる一昔前のUNIXなどに、残っていたりします)。
また、K&Rを使ったプロジェクトに当たってしまったら、
上記の点に気をつけてプログラムしてください。