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

tma*_*ric 13 c++ templates g++ instantiation abstract-syntax-tree

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

Mat*_* M. 8

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

  • AST:抽象语法树
  • ABT:抽象绑定树

前者代表的语法的视图作为编译器的理解是,后者是类似的绑定(即分辨率,使得a这里实际上是被宣布3行之前或该可变foocorrespdonds给函数在该标头中定义...).

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);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

通常,您应该看到模板是如何在那里实例化的.

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

  • 这里的关键,真的是_no_.:) (3认同)