首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用clang libtooling获得宏及其扩展?

如何使用clang libtooling获得宏及其扩展?
EN

Stack Overflow用户
提问于 2019-10-30 14:55:47
回答 1查看 1.3K关注 0票数 0

我正在做clang libtooling。

到目前为止,我成功地通过visitDeclRefExpr(DeclRefExpr *DR)在源文件中获得了被引用的宏

但是我能得到一个宏的列表吗?它的名字和扩展都是字符串。

exampleprogram.c

代码语言:javascript
复制
#define abc ab

#define sum 0

int main()
{
int ab;
abc  = abc + 0;
return 0;
}

我可以得到如下输出吗?

代码语言:javascript
复制
abc -- ab

sum -- 0

如何使用clang libtooling实现此输出。如何使用clang libtooling实现?

如果这个问题有解决方案,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2019-11-01 18:56:01

不幸的是,在AST中,Clang只在宏上存储了最少的信息。SourceLocation包含了一些关于在那里展开了哪些宏的信息。您可以在位置和宏扩展here上找到更多信息。

为了访问宏定义和扩展(可以说,在访问AST节点时访问它们),您需要使用Clang的预处理器。PPCalbacks是做这件事的正确工具。您可以从CompilerInstance (CompilerInstance::getPreprocessor)获取Preprocessor并将您的回调挂钩到它中。

我希望这些信息是有用的。与Clang一起破解快乐!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58620022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档