4

コンパイラ (g++) がテンプレート コードで何を行っているかを確認するにはどうすればよいですか?

コンパイル時にいくつかの数式を評価するために、boost.proto (式テンプレート ライブラリ) を使用しています。コードは式を正しく評価しますが、コンパイラが式を手書きの C コードと同等のものに拡張したかどうか (つまり、すべての一時変数を削除したかどうか)、またはコンパイル時の最適化がまだ残っているかどうかを確認したいと思います。行われなければ。

コンパイラがテンプレートに対して行ったことを確認する方法はありますか?

ありがとう

4

2 に答える 2

2
g++ -S

「コンパイルのみ; アセンブルまたはリンクしないでください」と文書化されています。基本的に、アセンブリ出力が得られます。

于 2011-06-30T10:04:06.460 に答える
2

テンプレートのインスタンス化がパスした後に C++ コードを表示するには、いくつかの方法があります。

  • を使用しますgcc -fdump-tree-original(または、-fdump-tree-allより多くのパスを表示することもできます)
  • Elsa C++ パーサーを使用: http://scottmcpeak.com/elkhound/sources/elsa/
  • Clang と LLVM C バックエンドを使用してください - 後者は最も読みにくいコードになりますが、場合によってはそれでも有用です。Clang 自体にも AST ダンプ機能が必要です。
于 2011-06-30T12:58:03.013 に答える