gpt4 book ai didi

c++ - 使用 Clang AST 打印函数的参数

转载 作者:可可西里 更新时间:2023-11-01 16:28:18 26 4
gpt4 key购买 nike

我想获取传递给函数的参数。例如,如果我接到电话

printf("%d%d", i, j);

输出应该是

%d%d
i
j

我能够在 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

请帮我获取参数。

最佳答案

您的回答对马丁很有帮助。我不知道 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

关于c++ - 使用 Clang AST 打印函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9607852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com