【问题标题】:cscope's bug? cscope can't find the definition of a function with a function pointer argumentcscope的错误? cscope 找不到带有函数指针参数的函数定义
【发布时间】:2015-11-11 06:03:41
【问题描述】:
//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


    【解决方案1】:

    是的,这是一个错误。 Cscope 没有实现完整的 C 语言解析器。相反,它只是使用了一个有很多怪癖的扫描仪。

    例如,如果opening argument bracket is on the next line 如下所示,cscope 也无法识别函数调用/声明:

    fn_foo
        (arg1, arg2);
    

    你发现的bug竟然是documented in cscope's man page

    它也不识别带有函数指针的函数定义 论据

        ParseTable::Recognize(int startState, char *pattern,
          int finishState, void (*FinalAction)(char *))
        {
          ...
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多