gpt4 book ai didi

c++ - libclang 获取成员声明

转载 作者:太空狗 更新时间:2023-10-29 21:41:55 24 4
gpt4 key购买 nike

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 at ok->num = 4;

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

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

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

关于c++ - libclang 获取成员声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com