首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clang libtooling:确定宏展开位置

Clang libtooling:确定宏展开位置
EN

Stack Overflow用户
提问于 2015-09-20 19:38:27
回答 1查看 1.4K关注 0票数 3

我有一个具有宏定义(扩展为类定义)的头header.h和一个包含header.h并使用此宏的源文件test.cpp。然后我使用RecursiveASTVisitor访问所有的CXXRecordDecl

当我访问CXXRecordDecl (在test.cpp中)扩展宏并查询其SourceLocationdump() it时,位置指向header.h --宏定义的位置。

对于这个CXXRecordDecl,我需要得到的是宏扩展的SourceLocation --在我的例子中,它应该是test.cpp

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 16:24:20

找到解决办法了。

所需的方法是SourceManager的getFileLoc(SourceLocation loc),如果loc“是一个宏位置”,它“返回扩展位置”。

我的代码获得了作为宏展开的普通类定义和定义的源位置:

代码语言:javascript
复制
bool VisitCXXRecordDecl(CXXRecordDecl* record)
{
    SourceLocation loc = record->getLocStart();
    SourceLocation locExp = m_sourceManager.getFileLoc(loc);
    // if record is a macro expansion in test.cpp, locExp points to test.cpp
    // if record is not a macro expansion, locExp correctly points to matching source file
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32683483

复制
相关文章

相似问题

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