typedef void (*LoopCallback)(int fd, void * arg);
LoopCallback func_ptr = 0;
void call_back(int value)
{
printf("%d", value);
}
void sys_register_input(LoopCallback call_back)
{
func_ptr = call_back;
}
int main()
{
sys_register_input((LoopCallback)call_back);
func_ptr(33, 0);
}
Run Code Online (Sandbox Code Playgroud)
在其中一个遗留项目中找到此代码,这种转换是否在c中有效?
编辑:调用函数ptr
不,它无效.调用者期望的原型与被调用函数的原型不匹配,因此可能导致未定义的行为.具体结果将取决于编译器和调用约定等因素(被调用的函数可能只是最终看到垃圾进入arg,或者线程堆栈可能被破坏导致崩溃).
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |