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的行为是一样的......
有一个未记录的编译器开关,/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)
请注意,此开关未记录.因此,它不受官方支持.它可以随时删除,也可以随时更改其行为.它可能有错误.使用风险等,等等.