C-99とは? わかりやすく解説

C99

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/10/10 02:16 UTC 版)

C言語 > C99

C99は、ISOで定められたC言語の規格である。正式な規格名は ISO/IEC 9899:1999。

歴史

ANSIの標準化プロセス(C89)のあと、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 浮動小数のより進んだサポート
  • 指示初期化子[1]struct foo f = {.x = 10, .y = 20};
  • 可変引数マクロのサポート
  • 最適化のためのrestrict修飾子

C89との後方互換性

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

C++との互換性

整数型、ヘッダファイルやライブラリファンクションなど、C99の標準のうちある部分はC++ Technical Report 1C++11に取り入れられている。

主要なコンパイラによるサポート

GCCClangIntel C++ Compiler 等はC99の新機能の大半をサポートしている。ただし、GCCは、ほとんど準拠しているが、規格への100%完全準拠は果たしていない[2]。GCC 4.x までのデフォルトは C89 に GNU 拡張を加えた -std=gnu89Clang のデフォルトは C99 に GNU 拡張を加えた -std=gnu99 である。GCC 5.0 から C11 に GNU 拡張を加えた -std=gnu11 がデフォルトになる[3]

Microsoft Visual C++ は 2013 から C99 の大半を実装した[4]。2015までは、tgmath.h や snprintf() などが未実装であったが 2017 で実装された。

Open Watcom C compiler は標準のうち最もよく使われている部分を実装している。かつては、ドキュメント化されていないコマンドラインスイッチを指定しないと有効化されなかった[5]。2010年現在の最新版である 1.9 では -za99 オプションを付けることで有効化される旨、明記されている。

Sun Studioは、サン・マイクロシステムズによればC99を完全にサポートしている[6]

Cインタプリタ ChはC99の主要な機能をサポートしている[7]

ユーザー

GCCがC99の多くの機能に対応しているため[2]、フリーソフトウェア開発などにおいて広く使われている。C99には複合リテラルと指示初期化子によるメンテナンス性の向上という大きな利点があり[8]、特に大規模なプロジェクトにおいて使われることが多い。Linuxカーネルにおいては、C99の指示初期化子を使う前から構文の異なるGCC拡張の指示初期化子を使っていた[1]。以前はVisual StudioがC99に対応していなかったため、使いたくても使えないプロジェクトが多かった。QEMUでは指示初期化子を使いながらC89との互換性を保つために、INIT_FIELDマクロを導入したものの、それにはメンバの省略ができないなどの欠点がある。FFmpeg/libavでは、C99のソースコードをC89へと変換するトランスレータのc99conv及びc99wrapを用意することで、この問題を解決している。

バージョンの検知

標準のマクロ__STDC_VERSION__はC99のサポートが可能であることを示すために199901Lと定義されている。C89のための__STDC__マクロと同様に、__STDC_VERSION__C89とC99のコンパイラで違うようにコンパイルされるコードを書くために使用することができる。例えば、この例では、inlineをどちらの場合でも利用可能である。

#if __STDC_VERSION__ >= 199901L
  /* "inline"は予約語 */
#else
# define inline /* 何も行わない */
#endif

後継

C99 の後継の仕様は C11 (ISO/IEC 9899:2011)。

C99の受理の後、標準作業部会は組み込み分野、文字データ型の追加(Unicodeのサポート)、境界チェック付きのライブラリ関数などのためのテクニカルレポートを準備してきた。作業は十進浮動小数、数学の特殊関数の追加、動的メモリ確保関数の追加についてのテクニカルレポートについて継続している。CとC++の標準委員会はスレッドについての規格制定に協調して取り組んでいる。

2007年以降、非公式に"C1x"と呼ばれるさらなるC標準が期待され始めた。標準委員会は現在の実装でテストされていない新しい機能の採用を制限するというガイドラインを採用した。

安全でないインタフェースの設計に関する不具合報告に応えて公式に廃止予定とされているgets関数がC11では削除され、gets_sを使わなくてはならなくなった。

参照

  1. ^ a b On the initialization of structures
  2. ^ a b Status of C99 features in GCC
  3. ^ GCC 5 Release Series — Changes, New Features, and Fixes”. GCC team (2018年9月30日). 2019年8月24日閲覧。
  4. ^ C99 library support in Visual Studio 2013 - Visual C++ Team Blog - Site Home - MSDN Blogs
  5. ^ C99 compliance in Open Watcom”. 2009年3月11日閲覧。
  6. ^ Sun Studio 12: C Compiler 5.9 Readme”. Sun Microsystems, Inc. (2007年5月31日). 2008年1月9日閲覧。
  7. ^ C/C++ interpreter Ch C99 features”. SoftIntegration, Inc. (2008年2月15日). 2008年2月15日閲覧。
  8. ^ Open source development using C99

C99

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/04 02:05 UTC 版)

C言語」の記事における「C99」の解説

詳細は「C99」を参照 1999年12月1日に、ISO/IEC JTC1 SC22 WG14 で規格改訂行いC++機能いくつか取り込むことを含め機能拡張しISO/IEC 9899:1999(E) Programming Language--C (Second Edition) を制定した。この版のC言語規格を、通称としてC99と呼ぶ。 日本では日本産業規格 JIS X 3010:2003プログラム言語C」がある。 主な追加機能変数宣言ブロック先頭でなくても良くなった。 ブール代数を扱うための_Bool型が予約語追加され標準ライブラリとしてstdbool.hを追加した複素数を扱うための_Complex型や_Imaginary型を予約語追加し標準ライブラリとして、complex.hを追加した少なくとも64ビット整数値を保持できる long long int型追加オプションとして、固定幅かつ内部表現規定され整数型標準化(stdint.h)。 //による1行コメントインライン関数inlineキーワード)。 可変長配列(alloca関数代替)。 C99は下記訂正がある。 ISO/IEC 9899:1999 Cor. 1:2001(E) ISO/IEC 9899:1999 Cor. 2:2004(E) ISO/IEC 9899:1999 Cor. 3:2007(E)

※この「C99」の解説は、「C言語」の解説の一部です。
「C99」を含む「C言語」の記事については、「C言語」の概要を参照ください。

ウィキペディア小見出し辞書の「C-99」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「C-99」の関連用語

C-99のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C-99のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのC99 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのC言語 (改訂履歴)、ANSI C (改訂履歴)、ブーリアン型 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS