2016-08-01 71 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文件)时,会出现问题。 –

相关问题