cl.exeのbuilt-inマクロを見つける方法
誰がcl.exeの組み込み/定義済みマクロを見つける方法を知っていますか? たとえば、gccの場合、次のコマンドラインはすべてのコンパイラの組み込みマクロをリストします
gcc -dM -E – </dev/null
編集:私は “実際のコンパイラを尋ねる”というgccに似た方法に興味があります。
ありがとう
このメソッドは、コンパイラにあらかじめ定義されたマクロのリストを要求する量を行いますが、文書化されていない機能を使用し、部分的なリストのみを提供します。完全性のためにここに含めます。
Microsoft C/C ++コンパイラでは、 .c および .cpp
次の簡単な置換コンパイラのフロントエンドは、渡されたオプションのリストを出力します。
/* MyC1.c */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p;
if ((p = getenv(“MSC_CMD_FLAGS”)) != NULL)
printf(“MSC_CMD_FLAGS:
%s
“, p);
if ((p = getenv(“MSC_IDE_FLAGS”)) != NULL)
printf(“MSC_IDE_FLAGS:
%s
“, p);
return EXIT_FAILURE;
}
これを “MyC1.exe”という名前の実行可能ファイルにコンパイルし、PATHに表示されていることを確認し、cl.exeに次のいずれかを使用してコンパイラのフロントエンドとして呼び出すように指示します。
cl /B1MyC1.exe AnyNameHere.c
cl /BxMyC1.exe AnyNameHere.cpp
そのオプションセットに対してどのマクロが定義されているかを確認するために必要な他のコマンドラインオプションを含めます。
結果の出力では、-Dオプションを探します。サンプルリストを以下に示します。実際の出力では、リストはスペースで区切られ、各マクロ定義の前に-Dがあり、その他のオプションも存在します。
_MSC_EXTENSIONS
_INTEGRAL_MAX_BITS=64
_MSC_VER=1600
_MSC_FULL_VER=160030319
_MSC_BUILD=1
_WIN32
_M_IX86=600
_M_IX86_FP=0
_MT
このテクニックには、コマンドラインオプションに依存するほとんどのマクロが含まれているようですが、常に __FILE__ や __DATE__ のように定義されているものは除外されます。
source