class aclass{
public:
int num;
};
int main()
{
aclass *ok;
ok->num = 4;
return 0;
}
现在当我执行 clang_getCursorDefinition(cur_cursor);在 o 开头的光标右侧 at ok->num = 4;它给出了 int num 的光标;在一个类中。我想让它给我 aclass 的光标 *ok; main 里面的声明。调用 clang_getCursorSemanticParent(cur_cursor) 似乎是错误的,就好像我将声明放在 main() 函数的内部或外部一样,它仍然返回 main() 作为语义父级。
有没有一种方法可以高效地执行此操作,而无需迭代每个可能的游标?
编辑: Clang 将制表符计为 1 个字符,这是正确的。我正在测试的编辑器自动将制表符计数为 4,所以 clang 期望的第 2 列,我的编辑器发送的是第 5 列。现在 getCursorDefinition 按预期工作,并将我带到作用域定义。
最佳答案
when I do clang_getCursorDefinition(cur_cursor); on the cursor right at the beginning of the
o
atok->num = 4;
也许您对自己的代码行为感到惊讶,因为(常见的)误解是每个源位置只有一个光标。
这个位置其实有很多游标,一个指向整个表达式,一个指向成员引用ok->num
,还有一个指向指针ok
。
(例如,有关此问题的更详细解释,请参见此问题:C++ libclang: Retrieving cursor from CXSourceLocation returning wrong cursor?)
您可能应该尝试在所有位于同一位置的光标中找到正确的光标。执行此操作的方式取决于您最初是如何获得光标的。
关于c++ - libclang 获取成员声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683981/