gpt4 book ai didi

c++ - 使用 clang 从 C/C++ 头文件中提取函数声明

转载 作者:行者123 更新时间:2023-11-30 02:27:29 30 4
gpt4 key购买 nike

我有以下递归 AST 访问者实现。

class ExampleVisitor : public clang::RecursiveASTVisitor<ExampleVisitor>{
private:
clang::ASTContext* ast_context_; // used for getting additional AST info

public:
explicit ExampleVisitor(clang::CompilerInstance* ci)
: ast_context_(&(ci->getASTContext())) // initialize private members

virtual bool VisitFunctionDecl(clang::FunctionDecl* func)
{
numFunctions++;
foo(func);
return true;
}};

函数 foo 打印给定输入文件的已声明函数的名称。

在此实现中,foo 打印在输入文件中声明的函数,并从包含的头文件中转储所有函数声明。我如何修改此代码以仅打印给定输入文件中声明的函数?

最佳答案

尝试使用 SourceManager 来确定 FunctionDecl 是否在翻译单元的主文件中:

virtual bool VisitFunctionDecl(clang::FunctionDecl* func)
{
clang::SourceManager &sm(ast_context_->getSourceManager());
bool const inMainFile(
sm.isInMainFile(sm.getExpansionLoc(func->getLocStart())));
if(inMainFile){
numFunctions++;
foo(func);
}
else{
std::cout << "Skipping '" << func->getNameAsString()
<< "' not in main file\n";
}
return true;
}};

我碰巧知道有一个名为 isExpansionInMainFile 的 AST Matcher。我从 cfe-3.9.0.src/include/clang/ASTMatchers/ASTMatchers.h 第 209-14 行中那个匹配器的源代码中获取了上面的代码。

关于c++ - 使用 clang 从 C/C++ 头文件中提取函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41717457/

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