我正在使用clang 3.0库进行C / C ++代码的分析,我需要获取变量声明的位置,我试过这段代码:
clang::VarDecl * vd = ...;
clang::SourceManager & srcMgr = ...;
clang::SourceRange loc = vd->getSourceRange();
clang::PresumedLoc locStart = srcMgr.getPresumedLoc(loc.getBegin());
clang::PresumedLoc locEnd = srcMgr.getPresumedLoc(loc.getEnd());
但是 locStart 和 locEnd 指向声明变量的开头(和结尾)(带有类型,可能是初始化器)。例如:
const char * ptr = 0;
^ ^ ^ ^
locStart 将指向第一个指针(^
),而locEnd将指向最后一个指针。如何获取第二个和第三个指针的位置(仅限名称,没有类型和初始化程序)?
答案 0 :(得分:5)
我目前无法测试它,但我想您要从SourceLocation
中提取getLocation()
获得的VarDecl
。该函数实际上由Decl
基类定义。虽然它似乎只识别一个位置,但它似乎可用于识别整个名称(我没有试图提取其各自的结尾,但是,只是用它来表示变量)。