我正在使用一个代码库,它有很多宏已定义和未定义,并在所有地方重新定义 . 令人惊讶的是编译器仍然能够通过它们进行咀嚼,所以无论如何都要提取这种宏扩展结果,即
MY_MACRO -> myFolder/myFile.cpp #266 float myFunc()
有没有办法为MSVC和GCC获得这个?
您可以将 gcc -E 用于GNU C / C.
gcc -E
对于Visual Studio,您可以从命令提示符处使用 CL /EP /C myfile.cpp .
CL /EP /C myfile.cpp
对于MSVC,使用/ P开关进行编译(项目>属性> C / C>预处理器>生成预处理文件) . 在解析完所有预处理指令后,这将生成包含编译器本身实际看到的文本的文件(扩展名为.i) .
我认为在Unix-y平台上你可以用 cpp 工具实现相同的功能 .
cpp
GDB允许您查看宏的结果(请参阅http://sourceware.org/gdb/onlinedocs/gdb/Macros.html) . 但我不想寻找 . 希望这可以帮助
3 回答
您可以将
gcc -E
用于GNU C / C.对于Visual Studio,您可以从命令提示符处使用
CL /EP /C myfile.cpp
.对于MSVC,使用/ P开关进行编译(项目>属性> C / C>预处理器>生成预处理文件) . 在解析完所有预处理指令后,这将生成包含编译器本身实际看到的文本的文件(扩展名为.i) .
我认为在Unix-y平台上你可以用
cpp
工具实现相同的功能 .GDB允许您查看宏的结果(请参阅http://sourceware.org/gdb/onlinedocs/gdb/Macros.html) . 但我不想寻找 . 希望这可以帮助