3

我有一个header.h带有宏定义的标题,它扩展为一个类定义和一个test.cpp包含header.h并使用这个宏的源文件。然后我用RecursiveASTVisitor访问所有CXXRecordDecl的。

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

我需要为这个 CXXRecordDecl 获得的是SourceLocation宏扩展 - 在我的情况下它应该是test.cpp

提前致谢。

4

1 回答 1

5

找到解决方案。

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

我的代码用于获取普通类定义和定义为宏扩展的源位置:

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
}
于 2015-09-22T16:24:20.423 回答