2016-08-01 8 views
0

関数に渡された引数を出力したいと思います。しかし、clangは関数定義で使用されるパラメータ名を返します。ここに私のコードです:Clangは引数の代わりにパラメータ名を返します

if (CallExpr *call = dyn_cast<CallExpr>(st)) 
{ 
    LangOptions LangOpts; 
    LangOpts.CPlusPlus = true; 
    PrintingPolicy Policy(LangOpts); 

    for(int i=0, j=call->getNumArgs(); i<j; i++) 
    { 
     std::string TypeS; 
     raw_string_ostream raw(TypeS); 
     call->getArg(i)->printPretty(raw, 0, Policy); 
     errs() << raw.str() << "\n"; 
    } 
} 

問題があるかもしれません教えてください。

答えて

0

引数になると、多くの可能性があります。

int iArgument = 123; 
char cArgument = 'c'; 
foo(iArgument, cArgument); 

いくつかの鋳物が遅れて返信用

for (unsigned i = 0; i < call->getNumArgs(); ++i) { 
    if (auto cast = dyn_cast<ImplicitCastExpr>(call->getArg(i))) { 
     if (auto arg = dyn_cast<DeclRefExpr>(cast->getSubExpr())) { 
      arg->getNameInfo().getName().dump(); 
     } 
    } 
} 
+0

申し訳引数の情報を取得するために必要です。しかし、私はあなたのような、最も単純なケースを扱っていると仮定します。私はiArgumentとcArgument、つまり引数の名前を取得したい。それで全部です。 [this](http://stackoverflow.com/questions/9607852/print-arguments-of-a-function-using-clang-ast)は 'printPretty()'を使用するように言います。 –

+0

また、私は単純なC++コードを使用しているときに引数の名前を得ることができます。しかし、別のライブラリのAPIを使用し始めると(compile_commands.jsonファイルを指定しているため)、これは問題を引き起こします。 –

関連する問題