//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”的定义。这是一个错误吗?
是的,这是一个错误。Cscope 没有实现完整的 C 语言解析器。相反,它只是使用有很多怪癖的扫描仪。
例如,如果左参数括号位于下一行,则 cscope 也无法识别函数调用/声明,如下所示:
fn_foo
(arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
您发现的错误甚至记录在 cscope 的手册页中:
它也不识别带有函数指针参数的函数定义
Run Code Online (Sandbox Code Playgroud)ParseTable::Recognize(int startState, char *pattern, int finishState, void (*FinalAction)(char *)) { ... }