2016-08-01 42 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,即參數的名稱。就這樣。 [這](http://stackoverflow.com/questions/9607852/print-arguments-of-a-function-using-clang-ast)說使用'printPretty()'。 –

+0

另外,當我使用簡單的C++代碼時,我可以獲得參數的名稱。但是當我開始使用另一個庫的API(爲此我指定了compile_commands.json文件)時,會出現問題。 –

相關問題