如何在msvc预处理器中打印宏?

Ser*_*gey 3 c++ gcc visual-c++ c-preprocessor

有没有办法在使用msvc或gcc的预处理器文件中查看我的#defines?

这是一个小代码:

#include <iostream>

#define asdasdadda asdsad    

int main()
{
    #ifdef asdasdadda
        std::cout << "yes\n";
    #else
        std::cout << "no\n";
    #endif

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

我通过这种方式用cl编译它:

$ cl main.cpp /C /P
Run Code Online (Sandbox Code Playgroud)

这是预处理main.i的尾部:

#line 2 "main.cpp"




int main()
{

        std::cout << "yes\n";


#line 13 "main.cpp"

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

这是我所期望的:

#line 2 "main.cpp"


#define asdasdadda asdsad

int main()
{

        std::cout << "yes\n";


#line 13 "main.cpp"

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

gcc的行为是一样的......

Jam*_*lis 7

有一个未记录的编译器开关,/d1PP它将在预处理器输出中保留宏定义.如果您使用编译Rado的示例/P /d1PP,您将获得以下输出文件:

#line 1 "q.cpp"
#define BLAH 1

int main()
{

      cout << "BLAH defined" << endl;


#line 10 "q.cpp"
}
Run Code Online (Sandbox Code Playgroud)

请注意,此开关未记录.因此,它不受官方支持.它可以随时删除,也可以随时更改其行为.它可能有错误.使用风险等,等等.