嘿,我在我的 C 程序中实现了一些回调。
typedef void (*server_end_callback_t)(void *callbackArg);
然后我有变量内部结构来存储这个回调
server->server_end_callback = on_sever_end;
我注意到我可以传入跳过 void *callbackArg
的 on_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/