g ++编译器有一个生成宏扩展代码(-E)的标志,所以我想知道在实际编译发生之前是否有办法在模板实例化之后查看程序?
答案 0 :(得分:7)
嗯,你可以得到的更接近的是阅读编译器生成的AST / ABT:
前者代表语法的视图,因为编译器理解它,后者类似在解析绑定之后(即,a
这里实际上是变量声明3行之前或foo
对应于该标题中定义的函数...)。
Clang允许转储其AST ...实际上是ABT,实际上,它正在被改进;潜行开发者预览:
int Test __attribute__((visibility("default")));
int main(int argc, char** argv) {
int x __attribute__((aligned(4))) = 5;
int y = 2;
for (;;)
if (x != y++)
break;
return (x * y);
}
通常你应该看看模板是如何在那里实例化的。
注意:要获得它,您需要-ast-dump
传递给clang前端。