37

私はLinuxマシンで作業しています。私が使用しているCコンパイラが続く標準を見つけるためのシステムコマンドはありますか?

4

7 に答える 7

33

これはコンパイラに依存します。GCCを使用していると思います。以下を使用して、コンパイラで定義されたマクロを確認できます。

gcc -dM -E - < /dev/null

特にフラグについては、マニュアルを確認してください。

__STDC_VERSION__

このマクロは、C標準のバージョン番号(yyyymmL形式の長整数定数)に展開されます。ここで、yyyyとmmは、標準バージョンの年と月です。これは、コンパイラが準拠しているC標準のバージョンを示します。STDCと同様に、GNU CPPがGCCで使用されていない限り、これは実装全体で必ずしも正確ではありません。

値199409Lは、現在のデフォルトである1994年に修正された1989C標準を意味します。値199901Lは、C規格の1999年改訂を意味します。1999リビジョンのサポートはまだ完了していません。

-traditional-cppオプションが使用されている場合、またはC ++またはObjective-Cをコンパイルしている場合、このマクロは定義されません。

このサイトでは、これに関する多くの情報を見つけることができます。ここにある表を参照してください。

于 2011-02-14T11:50:20.190 に答える
15

たとえば、標準マクロを使用してコードでこれをテストすることもできます (元は同じ名前の sourceforge プロジェクトから):

#if defined(__STDC__)
# define PREDEF_STANDARD_C_1989
# if defined(__STDC_VERSION__)
#  define PREDEF_STANDARD_C_1990
#  if (__STDC_VERSION__ >= 199409L)
#   define PREDEF_STANDARD_C_1994
#  endif
#  if (__STDC_VERSION__ >= 199901L)
#   define PREDEF_STANDARD_C_1999
#  endif
#  if (__STDC_VERSION__ >= 201710L)
#   define PREDEF_STANDARD_C_2018
#  endif
# endif
#endif

コマンドラインからこれを確認したい場合は、1 つ (c89 など) を選択して、最小限のプログラムからの戻り値を確認できます。

echo -e "#ifdef __STDC__\n#error\n#endif"|gcc -xc -c - > /dev/null 2>&1; test $? -eq 0  || echo "c89
于 2011-02-14T11:45:37.347 に答える
7

コンパイル時に、プリプロセッサ マクロをチェックします。

  • __ANSI__
  • __STDC__
  • __STDC_VERSION__>= c99 の場合は 199901L
于 2011-02-14T11:48:43.763 に答える
5

あなたはおそらくgccを持っています。その場合、コンパイル時に標準を指定できます。

$ gcc -Wall -std=c89 foo.c -o foo

また:

$ gcc -Wall -std=c99 foo.c -o foo

タイプ:

$ man gcc

完全な詳細については。

于 2011-02-14T11:42:08.530 に答える
1

C コンパイラが gcc の場合、-stdオプションを使用して、従う C 標準を指定できます。デフォルトは gnu89 です。特定のコンパイラの標準を決定するための一般的なシステム コマンドはありません。ドキュメントを確認する必要があります。

于 2011-02-14T11:47:55.670 に答える