libclang获取成员声明

时间:2014-12-29 05:45:14

标签: c++ clang libclang

class aclass{
public:
    int num;
};

int main()
{
    aclass *ok;
    ok->num = 4;
    return 0;
}

现在当我做clang_getCursorDefinition(cur_cursor);在光标右边的o开头的ok-> num = 4;它给出了int num的光标;在内部。我希望它给我一个aclass * ok的光标;主要内部的声明。调用clang_getCursorSemanticParent(cur_cursor)似乎错了,好像我把声明放在main()函数内部或外面它仍然返回main()作为语义父。

有没有办法有效地做到这一点,而不是迭代每一个可能的游标?

编辑:    Clang将制表符计为1个正确的字符。我正在测试的编辑器自动计算选项卡大小为4,所以clang期望第2列,我的编辑器发送为第5列。现在getCursorDefinition正在按预期工作,并带我进入范围定义。

1 个答案:

答案 0 :(得分:2)

  

当我做clang_getCursorDefinition(cur_cursor); 光标位于o ok->num = 4;

ok->num开头

可能您对代码行为感到惊讶,因为(常见的)误解是每个源位置只有一个游标。

这个位置实际上有很多游标,其中一个指向整个表达式,另一个指向成员引用ok,另一个指向指针{{1}}。 (有关此问题的详细解释,请参阅此问题:C++ libclang: Retrieving cursor from CXSourceLocation returning wrong cursor?

您应该尝试在位于同一位置的所有光标中找到正确的光标。这样做取决于你最初如何获得光标。