利用者:Trrlover/C99
C99は、プログラミング言語 Cの方言である。
歴史
[編集]ANSIの標準化プロセスのあと、Cの言語仕様はC++が自身の標準化の取り組みによって進化しているのと比べて停滞していた。 1995年には標準改定が作成されたが、C89への細かい修正および国際文字集合のサポートの追加のみであった。 しかし、1990年代の後半に標準はいくつかの改訂を経て、ISO/IEC 9899:1999 として1999年に発行された。 この標準は一般に"C99"と呼ばれる。 それはANSI標準としても2000年5月に受理された。 国際的なCの標準は作業部会ISO/IEC JTC1/SC22/WG14でメンテナンスされている。
新機能
[編集]C99にはさまざまな新機能が導入された。 多くはさまざまなコンパイラによってすでに拡張として実装されていた。
- インライン関数
- ファイルスコープでない変数宣言がブロックの先頭になければならないという制限の撤廃
- いくつかの新しいデータ型。
long long int
、optional extended integer types, 明示的な真偽型、複素数型 など - BCPLやC++のような、
//
から始まる一行コメント snprintf
のような新しいライブラリ関数stdbool.h
やinttypes.h
などの新しいヘッダファイル- 型総称的な数学関数 (
tgmath.h
) - IEEE 浮動小数のより進んだサポート
- 指示初期化子
- 可変引数マクロのサポート
- 最適化のための
restrict
修飾子
C90との後方互換性
[編集]C99はほとんどC90と後方互換であるが、いくつかの場面でより厳格である。
特に、型が省略された宣言で、暗黙的にint
と見なされるということはなくなった。
C標準委員会は暗黙的にint
に依存する古いコードを黙って処理するよりも注意深くない型指定の欠落を診断する方がより価値があると決定した。
実際には、コンパイラは型の欠落を診断するが、型をint
と見なし処理を続けるであろう。
C++との互換性
[編集]C99の標準のうちある部分はC++のTR1やC++0xとして知られる拡張に取り入れられている。 整数型、ヘッダファイルやライブラリファンクションを含む。
主要なコンパイラによるサポート
[編集]GCCとほかのCコンパイラはC99の新機能の多くをサポートしている。 しかし、MicrosoftやBorlandのような、C++に主にフォーカスしているようなベンダーのコンパイラでは、C++が同じような機能向上を提供していることからあまりサポートされていない。
GCCは、その広範なC99のサポートにもかかわらず、企画への完全準拠を果たしていない(41機能について準拠している)。 2008年11月には、九つの機能について、欠落しているか正しく動作していない[1]。
Open Watcom C compilerは標準のうち最もよく使われている部分を実装している。 ただ、これらはドキュメント化されていないコマンドラインスイッチを指定しないと有効化されない[2]。
Sun Microsystemsによれば、Sun Studio (無料でダウンロードできる) は現在C99標準を完全にサポートしている[3]。
Cインタプリタ ChはC99の主要な機能をサポートしていて[4]、Windows, Linux, Mac OS X, Solaris, QNX, FreeBSD で無料で使用できる。
バージョンの検知
[編集]標準のマクロ__STDC_VERSION__
はC99のサポートが可能であることを示すために199901L
と定義されている。
C90のための
__STDC__
マクロと同様に、
__STDC_VERSION__
はC90とC99のコンパイラで違うようにコンパイルされるコードを書くために使用することができる。
例えば、この例では、inline
をどちらの場合でも利用可能である。
#if __STDC_VERSION__ >= 199901L
/* "inline" is a keyword */
#else
# define inline /* nothing */
#endif
未来の標準の方向性
[編集]
C99の受理の後、標準作業部会は組み込み分野、文字データ型の追加(Unicodeのサポート)、境界チェック付きのライブラリ関数などのためのテクニカルレポートを準備してきた。
作業は十進浮動小数、数学の特殊関数の追加、動的メモリ割り当て関数の追加についてのテクニカルレポートについて継続している。
CとC++の標準委員会はスレッドについての規格制定に協調して取り組んでいる。
2007年以降、非公式に"C1x"と呼ばれるさらなるC標準が期待され始めた。
標準委員会は現在の実装でテストされていない新しい機能の採用を制限するというガイドラインを採用した。
安全でないインターフェースの設計に関する不具合報告に応えて公式に廃止予定とされているgets
関数が次のC標準に含まれないことが予想される。
関連事項
[編集]
参照
[編集]
- ^ “Status of C99 features in GCC”. Free Software Foundation, Inc. (2007年11月22日). 2008年1月9日閲覧。
- ^ “C99 compliance in Open Watcom”. 2009年3月11日閲覧。
- ^ “Sun Studio 12: C Compiler 5.9 Readme”. Sun Microsystems, Inc. (2007年5月31日). 2008年1月9日閲覧。
- ^ “C/C++ interpreter Ch C99 features”. SoftIntegration, Inc. (2008年2月15日). 2008年2月15日閲覧。