我正在做clang libtooling。
到目前为止,我成功地通过visitDeclRefExpr(DeclRefExpr *DR)在源文件中获得了被引用的宏
但是我能得到一个宏的列表吗?它的名字和扩展都是字符串。
exampleprogram.c
#define abc ab
#define sum 0
int main()
{
int ab;
abc = abc + 0;
return 0;
}我可以得到如下输出吗?
abc -- ab
sum -- 0如何使用clang libtooling实现此输出。如何使用clang libtooling实现?
如果这个问题有解决方案,请告诉我。
发布于 2019-11-01 18:56:01
不幸的是,在AST中,Clang只在宏上存储了最少的信息。SourceLocation包含了一些关于在那里展开了哪些宏的信息。您可以在位置和宏扩展here上找到更多信息。
为了访问宏定义和扩展(可以说,在访问AST节点时访问它们),您需要使用Clang的预处理器。PPCalbacks是做这件事的正确工具。您可以从CompilerInstance (CompilerInstance::getPreprocessor)获取Preprocessor并将您的回调挂钩到它中。
我希望这些信息是有用的。与Clang一起破解快乐!
https://stackoverflow.com/questions/58620022
复制相似问题