ansi c全球可访问的回调

时间:2013-06-18 15:50:13

标签: c callback global-variables function-pointers

我正在尝试使用运行时提供的方法在c程序中设置全局可访问的回调函数。

到目前为止,我有以下内容:

principal.h
-----------

extern Callback globalCallback;

principal.c
-----------

struct Callback {
void (*doubleCallback)(double * speed);
};

some_function(void (*updateDetected)(double*)){
    globalCallback.doubleCallback = updateDetected;
}


other.c
-----------

#include "principal.h"

void another_function(){
    globalCallback.doubleCallback(&some_double);
}

这会出现错误说明:未知类型名称'Callback'

我尝试了几种方法并遇到了各种错误。

您可以提供任何帮助。

2 个答案:

答案 0 :(得分:2)

您有两个错误:第一个是您没有在每个所需的源文件中定义结构。将结构的定义从principal.c源文件移动到principal.h头文件。

另一个是您没有定义类型 Callback,而是定义该名称的结构。这意味着您在声明和定义struct变量时必须使用globalCallback关键字。

答案 1 :(得分:0)

extern Callback globalCallback;

请改用:

extern struct Callback globalCallback;

在C中,当您只声明typedef时,您需要Callback使用struct Callback作为类型名称。这与C ++不同,它将Callback声明为新类型。

如果要为结构类型创建类型别名(我不建议这样做),您可以这样做:

typedef struct Callback Callback;