是否可以在编译之前使用实例化模板查看C ++代码(g ++)?

时间:2013-01-25 12:46:58

标签: c++ templates g++ instantiation abstract-syntax-tree

g ++编译器有一个生成宏扩展代码(-E)的标志,所以我想知道在实际编译发生之前是否有办法在模板实例化之后查看程序?

1 个答案:

答案 0 :(得分:7)

嗯,你可以得到的更接近的是阅读编译器生成的AST / ABT:

  • 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);
}

enter image description here

通常你应该看看模板是如何在那里实例化的。

注意:要获得它,您需要-ast-dump传递给clang前端。