これは gcc のマニュアルで詳細に説明されており、(インストールされている場合) 入力するinfo gcc
かオンラインで入手できます。4.7.2 マニュアルの関連セクションはhereです。
デフォルトでは、gcc はどの ANSI/ISO C 標準にも準拠していません。-std=gnu90
現在のデフォルトは、GNU 固有の拡張機能を備えた 1989/1990 標準である と同等です。(言語標準で必要とされる一部の診断は発行されません。) 2015 年 4 月 22 日にリリースされたバージョン 5.1.0 では、ここに記載されているように、デフォルトが から-std=gnu90
に変更されました。-std=gnu11
標準への準拠が必要な場合は、次のいずれかを使用できます。
-std=c90 -pedantic
-std=c99 -pedantic
-std=c11 -pedantic
-std=c90
-ansi
、-std=c89
、またはと綴ることもできます-std=iso9899:1990
。
-std=iso9899:199409
は、C90 標準に加えて、いくつかの小さな機能が追加された 1995 年修正をサポートしています (これらはすべて C99 にも含まれています)。
-std=c99
-std=c9x
orと綴ることもできます-std=iso9899:1999
(この名前c9x
は、規格が発行される前に使用されていました)。C99 のサポートは完全ではありませんが、ほぼ完了しています。
-std=c11
-std=c0x
orと綴ることもできます-std=iso9899:2011
(この名前c0x
は、最終規格が発行される前に使用されていました。誤ってx
9 を超えないと想定されていました)。C11 のサポートも不完全です。現在のステータスはここにまとめられています。
この-pedantic
オプションにより、gcc は、制約および構文規則の違反に対して必要な診断を出力します。場合によっては、これらの診断が単なる警告である場合もあります。これらの警告と、言語で必要とされていないその他の警告を簡単に区別する方法はありません。gcc が言語違反を致命的なエラーとして扱うようにするには、 で-pedantic
置き換えます。-pedantic-errors
標準の簡単な歴史:
- C89 は、1989 年にANSIによって公開された最初の公式の C 標準です。
- C90 は標準のISOバージョンであり、C89 とまったく同じ言語を記述しています。ANSI は、ISO バージョンの標準を正式に採用しました。2 つの技術的な正誤表があり、いくつかのエラーを修正しました。
- C95 は C90 の修正版で、主にダイグラフとワイド文字のサポートなど、いくつかの機能が追加されました。私の知る限り、マージされたバージョンは公開されていません。
- C99 は 1999 年に ISO によって発行されました。3 つの技術正誤表がありました。
- C11 は 2011 年に ISO によって発行されまし
__STDC_VERSION__
た__STDC_LIB_EXT1__
。
ANSI は、1999 年または 2011 年の標準の独自のバージョンを発行せず、代わりに ISO 標準を採用しました。
N1256は C99 標準の無料で入手可能なドラフトであり、3 つの技術正誤表がそれにマージされています。
N1570は、C11 標準の無料で入手できるドラフトです。それと公開された C11 標準との間にはいくつかの小さな違いがあり、加えて 1 つの技術正誤表があります。詳細については、この質問に対する私の回答を参照してください。