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