Nav*_*K N 11 c++ compiler-construction macros templates
我了解到编译器会在编译时扩展宏.模板也在编译时扩展.有没有办法看到这个扩展的代码?我正在使用Visual Studio 2008进行编译.
有什么想法吗?
Dav*_*Ray 10
VC++编译器(cl.exe)支持一些命令行开关:
/E preprocess to stdout
/P preprocess to file
/EP preproscess to stdout with no #lines
Run Code Online (Sandbox Code Playgroud)
可以在项目属性中添加其他命令行开关.在我的版本(VC2005)中,配置选项 - > C/C++ - >命令行 - >其他选项
编译器实际上没有进行任何宏扩展.这是预处理器的任务.这一切看起来都是一步,但编译器实际上会分配给单独的预处理器任务并为您捕获输出.
模板在编译时不会"扩展".它们在编译期间使用时进行实例化.不同之处在于编译器会立即为模板生成目标代码; 没有中间源代码出来.您不能将实例化的模板代码视为源代码,而是在需要时将其作为程序集转储出来.
如果你有GCC,你也可以使用带有正确参数的'cpp'直接调用预处理器(主要包括路径和命令行宏定义).其他人已经回答了MSVC.