//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"的定义。 这是一个错误吗?
答案 0 :(得分:3)
是的,这是一个错误。 Cscope没有实现完整的C语言解析器。相反,它只是使用一个有很多怪癖的扫描仪。
例如,如果opening argument bracket is on the next line像这样,cscope也无法识别函数调用/声明:
fn_foo
(arg1, arg2);
您发现的错误甚至是documented in cscope's man page:
它也不会识别带有函数指针的函数定义 参数
ParseTable::Recognize(int startState, char *pattern, int finishState, void (*FinalAction)(char *)) { ... }