C99C99は、ISOで定められたC言語の規格である。歴史[編集]ANSIの標準化プロセス(C89)のあと、C言語仕様はC++が標準化の取り組みによって進化しているのと比べて停滞していた。1995年には標準追補を作成したが、これはC89への細かい修正および国際文字集合対応の追加であった。して1999年に発行した。この標準は"C99"と呼ばれ、ANSI標準としても2000年5月に受理。JTC1/SC22/WG14で保守している。新機能[編集]C99にはさまざまな新機能が導入された。その多くはさまざまなコンパイラによってすでに拡張として実装されていた。インライン関数ファイルスコープでない変数宣言がブロックの先頭になければならないという制限の撤廃いくつかの新しいデータ型。20};可変引数マクロのサポート最適化のためのrestrict修飾子C89との後方互換性[編集]C99はほとんどC89と後方互換であるが、いくつかの場面でより厳格である。型が省略された宣言で、暗黙的にintと見なされるということはなくなった。C標準委員会は暗黙的にintに依存している古いコードを黙って処理するよりも、型指定が不注意により欠落していると診断する方により価値を置く決定をした。実際には、コンパイラは型の欠落を警告するが、型をintと見なし処理を続けることになる。C89では宣言されなかった関数は返り値の型がintで、引数の数、型が任意の関数と解釈されたが、C99では文法違反となる。1やC++11に取り入れられている。等はC99の新機能の大半をサポートしている。GCCは、ほとんど準拠しているが、規格への100%完全準拠は果たしていない[2]。デフォルトになる[3]。大半を実装した[4]。標準のうち最もよく使われている部分を実装している。ドキュメント化されていないコマンドラインスイッチを指定しないと有効化されなかった[5]。オプションを付けることで有効化される旨、明記されている。Studioは、サン・マイクロシステムズによればC99を完全にサポートしている[6]。ChはC99の主要な機能をサポートしている[7]。ユーザー[編集]GCCがC99の多くの機能に対応しているため[2]、フリーソフトウェア開発などにおいて広く使われている。C99には複合リテラルと指示初期化子によるメンテナンス性の向上という大きな利点があり[8]、特に大規模なプロジェクトにおいて使われることが多い。Linuxカーネルにおいては、C99の指示初期化子を使う前から構文の異なるGCC拡張の指示初期化子を使っていた[1]。StudioがC99に対応していなかったため、使いたくても使えないプロジェクトが多かった。QEMUでは指示初期化子を使いながらC89との互換性を保つために、INIT_FIELDマクロを導入したものの、それにはメンバの省略ができないなどの欠点がある。FFmpeg/libavでは、C99のソースコードをC89へと変換するトランスレータのc99conv及びc99wrapを用意することで、この問題を解決している。バージョンの検知[編集]標準のマクロ__STDC_VERSION__はC99のサポートが可能であることを示すために199901Lと定義されている。C89のための__STDC__マクロと同様に、__STDC_VERSION__はC89とC99のコンパイラで違うようにコンパイルされるコードを書くために使用することができる。この例では、inlineをどちらの場合でも利用可能である。9899:2011)。C99の受理の後、標準作業部会は組み込み分野、文字データ型の追加(Unicodeのサポート)、境界チェック付きのライブラリ関数などのためのテクニカルレポートを準備してきた。特殊関数の追加、動的メモリ確保関数の追加についてのテクニカルレポートについて継続している。CとC++の標準委員会はスレッドについての規格制定に協調して取り組んでいる。2007年以降、非公式に"C1x"と呼ばれるさらなるC標準が期待され始めた。標準委員会は現在の実装でテストされていない新しい機能の採用を制限するというガイドラインを採用した。安全でないインタフェースの設計に関する不具合報告に応えて公式に廃止予定とされているgets関数がC11では削除され、gets_sを使わなくてはならなくなった。2019年8月24日閲覧。2009年3月11日閲覧。2008年1月9日閲覧。2008年2月15日閲覧。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスのもとで利用できます。追加の条件が適用される場合があります。詳細については利用規約を参照してください。Cookieに関する声明モバイルビュ。