如何找出cl.exe的内置宏

cel*_*vek 20 c c++ macros visual-c++ cl

有谁知道我怎么能找出cl.exe的内置/预定义宏?例如,对于gcc,以下命令行将列出所有编译器的内置宏

gcc -dM -E - </dev/null
Run Code Online (Sandbox Code Playgroud)

编辑:我对类似于gcc的方式感兴趣,就是"询问实际的编译器".

谢谢

cde*_*dev 23

此方法确实要求编译器提供预定义宏的列表,但它使用未记录的功能并仅提供部分列表.我把它包含在这里是为了完整性.

Microsoft C/C++编译器允许分别使用.c和.cpp文件的/ B1和/ Bx命令行开关调用备用编译器前端.命令行界面模块CL.exe通过MSC_CMD_FLAGS环境变量将选项列表传递给替换编译器前端.此选项列表包括某些预定义宏的-D宏定义.

以下简单的替换编译器前端打印出传递给它的选项列表:

/* MyC1.c */

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *p;

    if ((p = getenv("MSC_CMD_FLAGS")) != NULL)
        printf("MSC_CMD_FLAGS:\n%s\n", p);

    if ((p = getenv("MSC_IDE_FLAGS")) != NULL)
        printf("MSC_IDE_FLAGS:\n%s\n", p);

    return EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)

将其编译为名为"MyC1.exe"的可执行文件,确保它在PATH中可见,并告诉CL.exe使用以下方法之一将其作为编译器前端调用:

cl /B1MyC1.exe AnyNameHere.c  
cl /BxMyC1.exe AnyNameHere.cpp  
Run Code Online (Sandbox Code Playgroud)

根据需要包括其他命令行选项,以查看为该组选项预定义的宏.

在结果输出中查找-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  
Run Code Online (Sandbox Code Playgroud)

此技术似乎包括大多数依赖于命令行选项的宏,但不包括那些始终定义的宏,例如__FILE__和__DATE__.


Chu*_*dad 5

/P预处理器标志将根据项目构建设置发出当前活动的宏。我不确定它是否与您显示的 gcc 命令完全等效。输出在.I文件中。