查看编译器扩展代码 - C++

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++ - >命令行 - >其他选项


Ada*_*wes 9

编译器实际上没有进行任何宏扩展.这是预处理器的任务.这一切看起来都是一步,但编译器实际上会分配给单独的预处理器任务并为您捕获输出.

模板在编译时不会"扩展".它们在编译期间使用时进行实例化.不同之处在于编译器会立即为模板生成目标代码; 没有中间源代码出来.您不能将实例化的模板代码视为源代码,而是在需要时将其作为程序集转储出来.

如果你有GCC,你也可以使用带有正确参数的'cpp'直接调用预处理器(主要包括路径和命令行宏定义).其他人已经回答了MSVC.

  • 它取决于编译器 - 预处理器就像在一个单独的阶段一样运行,但它不是强制性的,它是一个单独的程序. (2认同)

pet*_*hen 5

请注意,VC ++中的/ E仅扩展预处理程序语句(即#include,#ifdef,#define等)。

我不知道任何允许扩展模板的现代编译器。