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正在按预期工作,并带我进入范围定义。
答案 0 :(得分:2)
当我做clang_getCursorDefinition(cur_cursor); 光标位于
的o
ok->num = 4;
ok->num
开头
可能您对代码行为感到惊讶,因为(常见的)误解是每个源位置只有一个游标。
这个位置实际上有很多游标,其中一个指向整个表达式,另一个指向成员引用ok
,另一个指向指针{{1}}。
(有关此问题的详细解释,请参阅此问题:C++ libclang: Retrieving cursor from CXSourceLocation returning wrong cursor?)
您应该尝试在位于同一位置的所有光标中找到正确的光标。这样做取决于你最初如何获得光标。