cscope的错误? cscope无法通过函数指针参数找到函数的定义

时间:2015-11-11 06:03:42

标签: 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;
}

我使用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"的定义。 这是一个错误吗?

1 个答案:

答案 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 *))
    {
      ...
    }