libclang 获取成员声明

libclang getting the member declaration

本文关键字:声明 成员 获取 libclang      更新时间:2023-10-16
class aclass{
public:
    int num;
};
int main()
{
    aclass *ok;
    ok->num = 4;
    return 0;
}

现在当我做clang_getCursorDefinition(cur_cursor); 在 ok->num = 4 处 o 开头的光标上;它给出了整数的光标;在Aclass内部。我希望它给我一个类的光标 *ok;主内声明。调用 clang_getCursorSemanticParent(cur_cursor) 似乎是错误的,就好像我将声明放在 main() func 内部或外部一样,它仍然返回 main() 作为语义父级。

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

编辑: Clang 将制表符计为 1 个字符,这是正确的。我正在测试的编辑器自动将选项卡计为大小 4,因此 clang 期望的第 2 列,我的编辑器将发送为第 5 列。 现在,getCursorDefinition 按预期工作,并将我带到作用域定义。

当我在o开头的光标上做clang_getCursorDefinition(cur_cursor)时ok->num = 4;

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

实际上在这个位置有很多光标,其中一个指向整个表达式,另一个指向成员引用ok->num,另一个指向指针ok。(例如,有关此问题的更详细说明,请参阅此问题:C++ libclang:从 CXSourceLocation 检索游标返回错误的游标?

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