cl.exeのbuilt-inマクロを見つける方法

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
RPMでbuilt-inマクロの値を知るには?
DWTフィールドで他のbuilt-inを見つける方法は?
Common Lispでbuilt-inマクロの実装を見る方法はありますか?
モードを見つけるためのbuilt-in関数はありますか?
VC ++ cl.exe – DLLが見つかりません
なぜ ‘(:)’はbuilt-inですか?
cl.exe標準インクルードファイルが見つかりません
cl.exeはエラーコードD8050を返します
Visual Studio 2015にはcl.exeがありません
Visual Studio Community 2017 cl.exe
Rating