我有一个具有宏定义(扩展为类定义)的头header.h和一个包含header.h并使用此宏的源文件test.cpp。然后我使用RecursiveASTVisitor访问所有的CXXRecordDecl。
当我访问CXXRecordDecl (在test.cpp中)扩展宏并查询其SourceLocation和dump() it时,位置指向header.h --宏定义的位置。
对于这个CXXRecordDecl,我需要得到的是宏扩展的SourceLocation --在我的例子中,它应该是test.cpp。
提前谢谢。
发布于 2015-09-22 16:24:20
找到解决办法了。
所需的方法是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
}https://stackoverflow.com/questions/32683483
复制相似问题