//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“的定义。那是窃听器吗?
发布于 2016-05-25 19:10:21
是的,这是个窃听器。Cscope没有实现完整的C语言解析器。相反,它只是使用带有许多怪癖的扫描器。
例如,如果开始参数括号在下一行。如下所示,cscope也无法识别函数调用/声明:
fn_foo
(arg1, arg2);你发现的bug甚至是记录在cscope的手册页面中
它也不识别函数指针参数的函数定义。 ParseTable::识别( int startState,char *模式,int finishState,void (*FinalAction)(char *)) {.}
https://stackoverflow.com/questions/33645081
复制相似问题