3
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; 的光标。main里面的声明。调用 clang_getCursorSemanticParent(cur_cursor) 似乎是错误的,好像我将声明放在 main() 函数内部或外部,它仍然返回 main() 作为语义父级。

有没有一种方法可以有效地做到这一点,而无需迭代每个可能的游标?

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

4

1 回答 1

2

当我做 clang_getCursorDefinition(cur_cursor); 在at开头的光标右侧ook->num = 4;

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

这个位置实际上有很多游标,其中一个指向整个表达式,另一个指向成员引用ok->num,还有一个指向指针ok。(例如,有关此问题的更详细说明,请参见此问题:C++ libclang: Retrieving cursor from CXSourceLocation return wrong cursor?

您可能应该尝试找到正确的光标,其中所有光标位于同一位置。执行此操作的方法取决于您最初获得光标的方式。

于 2014-12-29T15:02:58.127 回答