【问题标题】:How to get location of variable name in clang::VarDecl如何在 clang::VarDecl 中获取变量名的位置
【发布时间】:2012-01-29 16:32:31
【问题描述】:

我正在使用 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());

但是 locStartlocEnd 指向声明变量的开始(和结束)(带有类型,可能还有初始化器)。例如:

const char * ptr = 0;
^            ^ ^   ^

locStart 将指向第一个指针(^),而 locEnd 将指向最后一个指针。如何获取第二个和第三个指针的位置(只有名称,没有类型和初始化器)?

【问题讨论】:

    标签: c++ clang


    【解决方案1】:

    我目前无法对其进行测试,但我认为您想从您的VarDecl 中提取getLocation() 获得的SourceLocation。这个函数实际上是由Decl 基类定义的。虽然它似乎只识别一个位置,但它似乎可用于识别整个名称(我没有尝试提取其各个末端,但只是用它来表示变量)。

    【讨论】:

    • 抱歉,getQualifierLoc() 无济于事。这个函数返回NestedNameSpecifierLoc,对于我来说它返回空对象(没有任何信息)。
    • 是的,你是对的:这实际上是用于定位 constvolatile 之类的东西。我已经用一个示例程序进行了测试,似乎它就像使用getLocation() 一样简单:而VarDecl 本身想要以类型开头,getLocation() 返回的SourceLocation 似乎识别名称。
    • 谢谢,真的很有帮助,我不知道,为什么我开始使用getSourceRangegetLocation 为我工作!
    • @Alexey - 请在答案中发布代码以获得更好的理解和参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多