14

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

4

1 回答 1

8

好吧,您可以更接近地阅读编译器生成的 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);
}

在此处输入图像描述

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

注意:要获得它,您需要-ast-dump通过 clang 前端。

于 2013-01-25T14:15:25.640 回答