C99

C99の最新ニュースをまとめて検索!

C99は、ISOで定められたプログラミング言語 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、拡張整数型, 明示的な真偽型、複素数型 など
  • BCPLやC++のような、//から始まる一行コメント
  • snprintfのような新しいライブラリ関数
  • stdbool.hinttypes.hなどの新しいヘッダファイル
  • 型総称的な数学関数 (tgmath.h)
  • IEEE 浮動小数のより進んだサポート
  • 指示初期化子
  • 可変引数マクロのサポート
  • 最適化のための restrict 修飾子

[編集] C90との後方互換性

C99はほとんどC90と後方互換であるが、いくつかの場面でより厳格である。 特に、型が省略された宣言で、暗黙的にintと見なされるということはなくなった。 C標準委員会は暗黙的にintに依存する古いコードを黙って処理するよりも注意深くない型指定の欠落を診断する方がより価値があると決定した。 実際には、コンパイラは型の欠落を診断するが、型をintと見なし処理を続けるであろう。 また、C90では宣言されなかった関数は返り値の型がintで、引数の数、型が任意の関数と解釈されたが、C99では文法違反となる。

[編集] C++との互換性

C99の標準のうちある部分はC++のTR1C++0xとして知られる拡張に取り入れられている。 整数型、ヘッダファイルやライブラリファンクションを含む。

[編集] 主要なコンパイラによるサポート

GCCとほかのCコンパイラはC99の新機能の多くをサポートしている。 しかし、MicrosoftBorlandのような、C++に主にフォーカスしているようなベンダーのコンパイラでは、C++が同じような機能向上を提供していることからあまりサポートされていない。

GCCは、その広範なC99のサポートにもかかわらず、規格への完全準拠を果たしていない[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標準に含まれないことが予想される。

[編集] 関連事項

[編集] 参照

  1. ^ http://gcc.gnu.org/c99status.html
  2. ^ "C99 compliance in Open Watcom". 2009-03-11 閲覧。
  3. ^ "Sun Studio 12: C Compiler 5.9 Readme". Sun Microsystems, Inc. (2007-05-31). 2008-01-09 閲覧。
  4. ^ "C/C++ interpreter Ch C99 features". SoftIntegration, Inc. (2008-02-15). 2008-02-15 閲覧。

最終更新 2009年11月27日 (金) 08:21 (日時は個人設定で未設定ならばUTC)。
【C99】変更履歴

ご利用上の注意

もっと調べる!