C言語の規格、方言の種類をざっくりまとめる
なんとなく気になったので調べてみた。主にWikipediaの情報を自分なりにまとめたもので、難しくてよくわからないのでとりあえずざっくり学ぶことが目標なので、細かい部分とかはばっさりカットしてます。
規格の種類
- K&R
- C89/C90
- C99
- C11
K&R
C言語の作者デニス・リッチーとベル研究所に在籍していたカナダ出身の計算機科学者ブライアン・カーニハンの共著である「The C Programming Language」が1978年を出版され、その後標準ができるまで実質的なC言語の標準として扱われる。発展可能性のある部分は曖昧に書かれていたため、C言語の普及とともに互換性のない処理系がいくつも作られた。(これはプログラミング言語でしばしば起こる現象であり、C言語固有の現象ではない。)
C89/C90
上記のような状況から、C言語の標準規格がつくられた。まずはじめに89年にANSI(American National Standards Institute - 米国国家規格協会)で標準化され、その後90年にISOでも標準規格がつくられた。それぞれ、C89(ANSI C89)、及びISO/IEC C90という通称がある。C90の方が章立てが追加されており、その後C89もそれにならって章立てが追加された。
最大の特徴は、C++ と同様の関数プロトタイプを導入して引数の型チェックを強化したことと、void や enum などの新しい型を導入したことである。
C99
1999年に策定された、規格改定で機能拡張されたC。C++の機能をいくつか取り込んでいる。gccはC99にほとんど対応しているが、一部実装の部分も残っている。
主な追加機能は
- 変数宣言がブロックの先頭でなくても良くなった。
- ブール代数を扱うための標準ライブラリー stdbool.h が追加された。
- 複素数を扱うための標準ライブラリーとして complex.h が追加された。
- 64 ビット整数値を保持できる long long int 型の追加。
- // による1行コメント。
など
C11
2011年に改定されたC言語の規格で、現在の最新のCの規格。gccやClangが一部対応している。Unicode文字列に標準対応するなどの変更がなされた。