C 回调 - 可选参数?

标签 c callback

嘿,我在我的 C 程序中实现了一些回调。

typedef void (*server_end_callback_t)(void *callbackArg);

然后我有变量内部结构来存储这个回调

server->server_end_callback = on_sever_end; 

我注意到我可以传入跳过 void *callbackArgon_server_end 回调函数实现并且代码工作正常(没有错误)。

跳过一些参数是否正确,例如 void * 实现原型(prototype)采用此类参数的回调函数?

void on_server_end(void) { 
 // some code goes here
}

最佳答案

我认为从 C 的角度来看这是一个未定义的行为,但由于您使用的调用约定,它起作用了。

例如,AMD64 ABI 声明前六个参数使用 CPU 寄存器而不是堆栈传递给调用函数。因此调用者和被调用者都不需要清理前六个参数并且它工作正常。

更多信息请引用the Wikipedia.

关于C 回调 - 可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44496916/

相关文章:

C 编程 - 如何将 char 写入 char*

c - 在 IDE 上运行良好,但在提交时出现运行时错误(SIGSEGV)

c - 为什么链接器会在 .rela.plt 中生成看似无用的重定位?

python - 通过 lambda 将变量传递到函数 Tkinter

javascript - 回调函数没有执行

c++ - 从回调函数访问实例

mysql - 堆栈粉碎错误

c - 静态变量和本地

Javascript 在回调函数中打破 for 循环

javascript - 不知道如何在 react 中处理这个问题 - 多个 promise