web-dev-qa-db-ja.com

現在のコンパイラの標準を見つける方法(C90など)

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

29
Hemanth

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

gcc -dM -E - < /dev/null

フラグに関するマニュアル をチェックします。特に:

__STDC_VERSION__

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

値199409Lは、現在のデフォルトである1994年に修正された1989 C標準を示します。値199901Lは、C標準の1999リビジョンを示します。 1999年のリビジョンのサポートはまだ完全ではありません。

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

this site には、これに関する多くの情報があります。存在する表 ここ を参照してください。

24
Tarantula

たとえば、標準のマクロを使用してコードでこれをテストすることもできます(元は同じ名前の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

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

echo -e "#ifdef __STDC__\n#error\n#endif"|gcc -xc -c - > /dev/null 2>&1; test $? -eq 0  || echo "c89
11
Flexo

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

  • __ANSI__
  • __STDC__
  • __STDC_VERSION__> = 199901L for c99
6
Yann Droneaud

おそらくgccがあるでしょう。その場合、コンパイル時に標準を指定できます。

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

または:

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

タイプ:

$ man gcc

詳細については。

4
Paul R

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

0
ciaron