私はLinuxマシンで作業しています。私が使用しているCコンパイラが続く標準を見つけるためのシステムコマンドはありますか?
7 に答える
これはコンパイラに依存します。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をコンパイルしている場合、このマクロは定義されません。
たとえば、標準マクロを使用してコードでこれをテストすることもできます (元は同じ名前の 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
コンパイル時に、プリプロセッサ マクロをチェックします。
__ANSI__
__STDC__
__STDC_VERSION__
>= c99 の場合は 199901L
あなたはおそらくgccを持っています。その場合、コンパイル時に標準を指定できます。
$ gcc -Wall -std=c89 foo.c -o foo
また:
$ gcc -Wall -std=c99 foo.c -o foo
タイプ:
$ man gcc
完全な詳細については。
C コンパイラが gcc の場合、-std
オプションを使用して、従う C 標準を指定できます。デフォルトは gnu89 です。特定のコンパイラの標準を決定するための一般的なシステム コマンドはありません。ドキュメントを確認する必要があります。