はじめての C

[Learning GNU C]

1.5. なにが C の 有効性を 決めるのか?

プログラマにとって 「C の 有効性」は その compiler によって 定義される。 C には 多くの 様式 dialect が 存在するが ありがたいことに それは 全て よく 似ている。 また 他に Objective C や C++ のような C を もとにした 言語が ある。 こうした言語は その外観は とても C に 似ているが その扱い方が 全く 異なる。 GCC は (Objective C や C++ を 含む) 多くの 他の 言語と 同様 C の 多くの 様式を 解釈する。

1.5.1. "K&R" C

C は 1969年から 1973年の 間に Dennis Ritchie によって つくられた。 1978年 Dennis Ritchie は Brian Kerningham とともに すばらしい C の tutorial 『プログラミング言語 C』 を 出版した。 それは この言語の 初めての 正式な 定義だった。 このオリジナルの 様式を 用いる場合は それは 時に Traditional C と 呼ばれた。 まずいことに この本には 多くの 言語の 未定義な 局面が 残されていて それは compiler を 書く人が こうした 局面を どう 扱うかに 関して 定義しなければ ならないことを 意味した。 その結果 1つの code は どの compiler が 使われるかに よって さまざまに 振る舞うことに なった。 この様式は あまり 長くは 用いられていないが GCC は とても 古い プログラムを コンパイルする際でも それを サポートする。 ここでは 歴史的な 目的にのみ それに 言及する。

1.5.2. ISO C

1983年 ANSI は より 厳格な standard (標準) を 作成し また この言語で 彼らの 見つけた ほんの少しの 欠陥を 調整するための 委員会を 設立した。 1989年には ISO によって 受理された standard が 最終的に 決定した。 この新しい 様式は C89 として 知られることになる。 それは また ISO C または ANSI C とも 呼ばれる。 GCC は compiler による その適応が 最も 確認されたものの 1つだ。

1.5.3. C99

ANSI C は 不定期に その standard を 改訂する 会合を 開く。 standard の 最新の 改訂は 1999年に 発表され それは C99 として 知られている。 C99 を サポートする compiler は まだ ほんの わずかであり 多くの 重要な ソフトウェアを それぞれの OS で 変更するには 時間を 要する。 GCC による C99 の サポートは (これを 書いている 時点で) ほとんど 完璧だが 開発者たちは そのために 努めている。

1.5.4. GNU C

GNU C は C89 に 最も 似ているが それは C99 での 新しい 機能に 加えて 他にも いくつかの 拡張を もつ。 こうした拡張は C99 によっては 良好な 解決策が 提供されないという 問題点を 捜し出すことから 注意深く 加えられる。 GNU C は GCC の 初期設定 default の 様式であり この本で 用いられる 様式である。 それらを 用いる場合には GNU での 拡張は できる限り 示すよう 努めるが 通常では GNU C を 十分に 使うほうが より 適切だ。 ISO C を 用いるのは プログラムを 最低限の 水準線での 基準に 限定することとなり それは 単に 特殊な 場合でのみ 使われるだろう。

1.5.5. 様式 dialect の 選択

もし 初期設定 以外で ある様式を 用いたい場合には そうした選択を "-std=" に 続けて 様式の 名前を 換えることで 指定できる。 そうした名前には c89, c99, gnu89 それと gnu99 が ある。 "gnu89" が 現在の 初期設定だが C99 の サポートが 完全に なれば "gnu99" が 初期設定と なるだろう。 変更は 特別 注意するものでは ない。

1.5.6. 将来の standard

GCC に 加えられた こうした 拡張は 新しい ISO C に 対する inspiration が 主な 源泉と なっている。 ANSI C グループが 多くの compiler での 拡張を 移植したと わかれば その将来における 必要性を 再検討し もし それが 利益になると 判断すれば standard に それを 移植する 方法を 計画する。 GCC での 拡張のうち いくらかは 次の standard に 導入され いくらかは そう ならないだろう。

1.6. 結論

これで 前置きは 終わりだ。 今では プログラミングとは 何なのかを 理解したと 期待をして。 次の章では 実際に なにかを 行なう プログラムを 書き それが どう 動くのかを 説明しよう。