//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/