我希望将参数传递给函数。例如,如果我有电话
printf(“%d%d”,i,j);
输出应为
%d%d
我
Ĵ
我能够在RecursiveASTVisitor中使用VisitCallExpr()进行函数调用。还能够获取参数的数量和参数类型。但我不知道如何得到论点。
bool MyRecursiveASTVisitor::VisitCallExpr (clang::CallExpr *E)
{
for(int i=0, j=E->getNumArgs(); i<j; i++)
{
llvm::errs() << "argType: " << E->getArg(i)->getType().getAsString() << "\n";
}
return true;
}
输出:
argType:char *
argType:int
argType:int
请帮我弄清楚。
答案 0 :(得分:11)
你的回答对马丁斯非常有帮助。我不知道printPretty(...)函数。现在,我可以打印参数。下面是我打印参数的代码。
bool MyRecursiveASTVisitor::VisitCallExpr (clang::CallExpr *E)
{
clang::LangOptions LangOpts;
LangOpts.CPlusPlus = true;
clang::PrintingPolicy Policy(LangOpts);
for(int i=0, j=E->getNumArgs(); i<j; i++)
{
std::string TypeS;
llvm::raw_string_ostream s(TypeS);
E->getArg(i)->printPretty(s, 0, Policy);
llvm::errs() << "arg: " << s.str() << "\n";
}
return true;
}
,输出如下:
"%d%d"
i
j
答案 1 :(得分:9)
您正在调用E-&gt; getArg(i) - &gt; getType() - 但这是参数类型。使用E-&gt; getArg(i)来获得表示参数值的Expr *。然后使用printPretty(...)方法将其打印成字符串,如果您需要字符串值。