67

cc の現在のバージョンを表示するように依頼すると、これが表示されます。

$ cc --version
cc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ 

私が知りたいのは、c89、c90、c99、または c11 のどれが使用されているかです。

4

6 に答える 6

88

これは 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=c9xorと綴ることもできます-std=iso9899:1999(この名前c9xは、規格が発行される前に使用されていました)。C99 のサポートは完全ではありませんが、ほぼ完了しています。

-std=c11-std=c0xorと綴ることもできます-std=iso9899:2011(この名前c0xは、最終規格が発行される前に使用されていました。誤ってx9 を超えないと想定されていました)。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 つの技術正誤表があります。詳細については、この質問に対する私の回答を参照してください。

于 2013-02-06T19:57:23.173 に答える
3

最初の行は、GCC バージョン (4.7.2) を示します。

(Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2

コードをコンパイルするときに、使用する C/C++ リビジョンを指定するには、-std=c99または-std=c99 ...を追加します。

注記gnu89はデフォルトで使用されます。

于 2013-02-06T19:27:34.707 に答える
0

注意すべきことの 1 つは、gcc の -std= オプションを使用して、コンパイラを "サンドボックス" して、標準 C の新しいバージョンからの構成をサポートしないようにすることはできません。これは、あってもなくても当てはまります。-pedantic

gcc -std=c89 -pedantic一部の C99 コード構成を使用してコンパイルしようとすると、エラーや警告が表示されることに依存することはできません。場合によってはそうなりますが、そうでない場合もあります。たとえば、%zuC99 まで追加されなかったにもかかわらず、printf() 呼び出しで書式指定子を使用するコードを喜んでコンパイルします。

于 2013-03-12T10:14:54.290 に答える