cscope 的错误? cscope 找不到带有函数指针参数的函数的定义

标签 cscope

//main.c  
#include "stdio.h"
void f(){
    printf("Welcome to emacs's world!");
    return;
}
void call_f(void (*f)()){
    (*f)();
    return;
}
void main(){
    call_f(f);
    return;
}

我使用cscope查找函数“call_f”的定义,但没有结果,cscope找不到“call_f”的定义。
我将函数“call_f”的参数类型更改为除函数指针之外的另一种类型。

#include "stdio.h"
void f(){
    printf("Welcome to emacs's world!");
    return;
}
void call_f(/* void (*f)() */void){
//    (*f)();
    f();
    return;
}
void main(){
//    call_f(f);
    call_f(void);
    return;
}

然后cscope可以找到函数“call_f”的定义。 这是一个错误吗?

最佳答案

是的,这是一个错误。 Cscope 没有实现完整的 C 语言解析器。相反,它只是使用有很多怪癖的扫描仪。

例如,如果opening argument bracket is on the next line,cscope也无法识别函数调用/声明。像这样:

fn_foo
    (arg1, arg2);

您发现的bug甚至是documented in cscope's man page :

Nor does it recognize function definitions with a function pointer argument

    ParseTable::Recognize(int startState, char *pattern,
      int finishState, void (*FinalAction)(char *))
    {
      ...
    }

关于cscope 的错误? cscope 找不到带有函数指针参数的函数的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33645081/

相关文章:

vim - vim 和 emacs 中的代码导航

vim - 如何将 cscope 用于包含空格的路径

c++ - 使用 CScope 查找函数调用(非定义)(C/C++)

linux - 使用 vim 设置 cscope

vim - 如何在 tmux 窗口中从 vim 设置窗口标题

linux - Cscope 错误 : cscope: cannot read list size from file cscope. 出

vim - vim启动时如何搜索tags文件并自动加载

将 vim ctags <C-]> 和 <C-T> 键映射复制到 <C-Q> 和 <C-A>

windows - 如何在windows gvim下完美使用cscope