Linuxマシンで作業しています。私が使用しているCコンパイラが後に続く標準を見つけるためのシステムコマンドはありますか?
これはコンパイラに依存します。GCCを使用していると思います。次のコマンドを使用して、コンパイラ定義のマクロを確認できます。
gcc -dM -E - < /dev/null
フラグに関するマニュアル をチェックします。特に:
このマクロは、C標準のバージョン番号、yyyymmL形式のlong整数定数に展開されます。ここで、yyyyとmmは、標準バージョンの年と月です。これは、コンパイラが準拠するC標準のバージョンを示します。 [〜#〜] stdc [〜#〜]のように、GNU CPPが実行されていない限り、これは実装全体に対して必ずしも正確ではありませんGCCで使用されます。
値199409Lは、現在のデフォルトである1994年に修正された1989 C標準を示します。値199901Lは、C標準の1999リビジョンを示します。 1999年のリビジョンのサポートはまだ完全ではありません。
このマクロは、-traditional-cppオプションが使用されている場合、またはC++またはObjective-Cをコンパイルする場合には定義されません。
たとえば、標準のマクロを使用してコードでこれをテストすることもできます(元は同じ名前の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
コンパイル時に、プリプロセッサマクロをチェックします。
__ANSI__
__STDC__
__STDC_VERSION__
> = 199901L for c99おそらくgccがあるでしょう。その場合、コンパイル時に標準を指定できます。
$ gcc -Wall -std=c89 foo.c -o foo
または:
$ gcc -Wall -std=c99 foo.c -o foo
タイプ:
$ man gcc
詳細については。
Cコンパイラがgccの場合は、-std
オプション指定従うC標準。デフォルトはgnu89です。特定のコンパイラの標準を決定する一般的なシステムコマンドはありません。ドキュメントを確認する必要があります。