14

g++ コンパイラにはマクロ展開コード (-E) を生成するフラグがあるため、実際のコンパイルが行われる前に、テンプレートのインスタンス化後にプログラム coude を表示する方法があるかどうか疑問に思っています。

4

1 に答える 1

8

コンパイラによって生成された AST/ABT を読むことで、さらに詳しく知ることができます。

  • AST: 抽象構文木
  • ABT: 抽象バインディング ツリー

前者はコンパイラーが理解する構文のビューを表し、後者はバインディングの解決に似ています (つまり、ahere は実際には 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 に答える