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

董泽锋*_*董泽锋 2 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;
}
Run Code Online (Sandbox Code Playgroud)

我使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

max*_*zig 5

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

例如,如果左参数括号位于下一行,则 cscope 也无法识别函数调用/声明,如下所示:

fn_foo
    (arg1, arg2);
Run Code Online (Sandbox Code Playgroud)

您发现的错误甚至记录在 cscope 的手册页中

它也不识别带有函数指针参数的函数定义

    ParseTable::Recognize(int startState, char *pattern,
      int finishState, void (*FinalAction)(char *))
    {
      ...
    }
Run Code Online (Sandbox Code Playgroud)