c++ - libclang 获取成员声明

标签 c++ clang libclang

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/

相关文章:

xcode5 - 通过 Fish shell 在 vi​​rtualenv 中安装 kivy 时出现错误 mno-fused-madd

c++ - `static`的使用如何影响我的代码速度?

c++ - 如何隐藏/取消隐藏文件而不删除 Windows 上 C++ 中的其他属性

c++ - C++20 中允许 east constexpr/constinit/consteval 吗?

c++ - 辅助函数 : lambdas vs normal functions

c - 在 PIC 微 Controller 项目 : need to disable clang warning 中使用 clang 自动完成

c++ - 在 move 构造函数中用作 arg 后,哪些 std 类型保证为空/空

python - 展开宏并检索宏值

llvm - 关于 libclang 的任何教程?

c++ - 如何使用 libclang 确定成员函数是 const 还是 volatile?