用C语言实现回调函数
我是C语言的新手。我正在尝试使用函数指针实现回调函数 我犯了一个错误用C语言实现回调函数,c,C,我是C语言的新手。我正在尝试使用函数指针实现回调函数 我犯了一个错误 :test_callback.c:10: error: expected identifier or ‘(’ before ‘void’ 当我尝试编译以下程序时: #include<stdio.h> void (*callback) (void); void callback_proc () { printf ("Inside callback function\n"); } void register
:test_callback.c:10: error: expected identifier or ‘(’ before ‘void’
当我尝试编译以下程序时:
#include<stdio.h>
void (*callback) (void);
void callback_proc ()
{
printf ("Inside callback function\n");
}
void register ((void (*callback) (void)))
{
printf ("Inside registration \n");
callback (); /* Calling an initial callback with function pointer */
}
int main ()
{
callback = callback_proc;/* Assigning function to the function pointer */
register (callback);/* Passing the function pointer */
return 0;
}
#包括
作废(*收回)(作废);
无效回调程序()
{
printf(“内部回调函数\n”);
}
无效寄存器((void(*回调)(void)))
{
printf(“内部注册”);
回调();/*使用函数指针调用初始回调*/
}
int main()
{
callback=callback_proc;/*将函数赋值给函数指针*/
寄存器(回调);/*传递函数指针*/
返回0;
}
这是什么错误?有人能帮忙吗?我建议使用typedef
#include<stdio.h>
typedef void (*callback_t) (void);
callback_t callback;
void callback_proc(void)
{
printf ("Inside callback function\n");
}
void reg( callback_t _callback )
{
printf ("Inside registration \n");
_callback();
}
int main ()
{
callback = callback_proc;
reg(callback);
return 0;
}
#包括
typedef void(*callback_t)(void);
回调(callback)t callback ;;
作废回拨程序(作废)
{
printf(“内部回调函数\n”);
}
void reg(回调\u t\u回调)
{
printf(“内部注册”);
_回调();
}
int main()
{
callback=callback\u proc;
reg(回调);
返回0;
}
编辑:删除了寄存器问题您不能将“寄存器”用作函数名,因为它是C关键字
register
是一个C关键字:为函数使用另一个名称void funcName(void (*callback) (void))
- 您不能使用名称
,因为它是一个关键字(不再经常使用,但它仍然存在)register
- 将函数的定义从
致: (去掉参数声明周围的参数void wasRegister((void (*callback) (void)))
callback\u proc()
没有与callback
变量匹配的增量的警告(取决于您如何将程序编译为C或C++),因此您可能希望将其声明更改为:
void callback_proc (void)
明确表示它不需要任何参数。请从中查看。公开类型化函数指针供世界使用是一回事,确保正常转换是另一回事。\35; include
#include<stdio.h>
typedef void (*callback_func) (void);
static callback_func the_callback = 0;
void process (void)
{
printf ("Inside process function\n");
}
void callback_register (callback_func cb)
{
the_callback = cb;
printf ("Inside registration \n");
}
void callback(void)
{
the_callback();
}
int main (void)
{
callback_register(process); /* Passing the function pointer */
callback();
return 0;
}
typedef void(*回调函数)(void);
静态回调函数\u callback=0;
作废处理(作废)
{
printf(“内部进程函数\n”);
}
无效回调寄存器(回调函数cb)
{
_回调=cb;
printf(“内部注册”);
}
无效回调(void)
{
_回调();
}
内部主(空)
{
回调_寄存器(进程);/*传递函数指针*/
回调();
返回0;
}
如果此代码是模块化的,那么声明
回调
静态将更有意义,然后您将被迫调用回调
以设置它,而回调
以调用它-回调
将无法在实现(.c)之外访问只有函数声明会在标题(.h)中。register
是一个关键字,顺便说一句。你在哪一行发现了错误?只是一个提示:typedefs有助于让事情更可读一些:typedef void(*CallbackFunc)(void);
。然后你的函数签名是void registerFunc(CallbackFunc callback)
您的声明是CallbackFunc my\u cb=&callback\u proc
噢,还有一件事:void callback\u proc()
与void callback\u proc(void)不同
在C.Yep中,很难找到额外的参数。+1 typedef在哪里?这是一个很好的建议,但您的示例缺少它。我看不到typedef?您所做的是定义了一个函数指针,它不是类型安全的。很抱歉,我没有意识到我在复制和粘贴时遇到问题,您答案中的链接已失效。@bummi、 如果Tim决定删除此答案,他将收到一条消息,该帖子已被Tim post删除♦. 要知道您的答案被删除的原因,请使用meta:D
#include<stdio.h>
typedef void (*callback_func) (void);
static callback_func the_callback = 0;
void process (void)
{
printf ("Inside process function\n");
}
void callback_register (callback_func cb)
{
the_callback = cb;
printf ("Inside registration \n");
}
void callback(void)
{
the_callback();
}
int main (void)
{
callback_register(process); /* Passing the function pointer */
callback();
return 0;
}