7

C++ のソース コードを C/C++ のソース コードに変換するツールはありますが、インスタンス化された (展開された) テンプレートを使用しますか? これは、C++ テンプレートが変換したコードを明確に理解するために必要です。IDE(MSVS、QtCreator、...)またはコンパイラ(ICC、GCC、MSVC、Clang)に存在する可能性がありますか?

4

2 に答える 2

6

これはすでにSOで回答されているようです

逆アセンブルされたコードを使用する Alexey Frunze のアイデア/原則は非常に優れており、単純化されたテンプレートを使用することで、それが何をするかを正確に理解できる可能性がかなり高くなります。

編集1 コンパイラが行ったことを理解する方法には、他にもいくつかの可能性があります

  1. 使用:gcc -S -O1 {yourcode.cpp}アセンブリを取得してツールを使用します( C コードに慣れている場合は、逆アセンブリを C コードに変換するためのbinutilsc++filtの一部です)
  2. 使用: g++ -fdump-tree-original file.cpp(疑似) C++ コードを取得する
  3. 最後のインスタンス化の後にブレークポイントで MSVC++ デバッガーを使用し、インスタンス化されたテンプレートのパラメーターであるすべての型と値を確認します。
  4. 使用:インスタンス化されたテンプレートで XML を生成するためのGCC XML ( FAQ )
  5. コンパイラがテンプレートをインスタンス化して最適化する方法を知るには、Clang を使用できます-emit-llvm。LLVM IR を取得し、llvm-disそれをテキストに変換するために使用します。
  6. CPP インサイトは、インスタンス化を確認するための LLVM ベースのツールの Web サイトです
于 2013-04-05T19:04:25.937 に答える
2

インスタンス化またはそのパラメーター内に意図的なエラーを配置することで問題を回避できます。その後、コンパイラー (適切なバージョン: gcc 4.8、clang などを想定) に次の行に沿って何かを出力させることができます。 A=int、B=float、..".

于 2013-04-03T20:42:50.300 に答える