我正在使用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());
Run Code Online (Sandbox Code Playgroud)
但是locStart和locEnd指向声明变量的开头(和结尾)(带有类型,可能是初始化器).例如:
const char * ptr = 0;
^ ^ ^ ^
Run Code Online (Sandbox Code Playgroud)
locStart将指向第一个指针(^),而locEnd将指向最后一个指针.如何获取第二个和第三个指针的位置(仅限名称,没有类型和初始化)?
我目前未在位置进行测试,但我认为你要提取SourceLocation所获得getLocation()从你的VarDecl.该函数实际上由Decl基类定义.虽然它似乎只识别一个位置,但它似乎可用于识别整个名称(我没有试图提取其各自的结尾,但是,只是用它来表示变量).