使用 clang 从 C/C++ 头文件中提取函数声明
Extracting function declarations from a C/C++ header file using clang
我有以下递归 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 filen";
}
return true;
}};
我碰巧知道有一个叫isExpansionInMainFile
的AST匹配器。我从 cfe-3.9.0.src/include/clang/ASTMatchers/ASTMatchers.h 行 209-14 中的匹配器源代码中获取了上面的代码。
相关文章:
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何从也包含C++字母的文本文件中提取某些数字?
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- JPG-如何从ICC配置文件部分APP2读取/提取数据
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 如何使用 WINAPI 和 C++ 提取可执行文件的文件描述?
- 查找并提取文件中的某个值
- 如何从txt文件c++中提取括号之间的数字
- 在Linux Mint 19下,从哪里提取wxWidgets的源代码(.cpp文件)用于步骤内部调试
- 如何将ASCII数字转换为从文件中提取的整数
- 帧提取 使用OpenCV的视频文件开头只有几秒钟
- 从 C++ 中的文件路径中提取文件名
- 将文本文件数据读入字符数组时提取运算符的歧义
- 从.o目标文件中提取函数的原始机器代码?
- 有谁知道ziplib是否能够在不实际提取所有文件的情况下验证zip库
- 是否可以为给定的静态库人为地诱导对象文件提取
- C++将.reg文件提取到注册表
- c++文件提取检查是否为int
- 使用文件提取操作符读取int或string