【发布时间】:2020-10-24 00:13:23
【问题描述】:
如果我尝试使用实际的 void (*)(void *) 调用带有参数 void (*)(char *) 的函数,我会收到此错误:
note: expected ‘void (*)(char *)’ but argument is of type ‘void (*)(void *)’
是否允许将void (*)(void *) 转换为void (*)(char *)?如果不是,为什么不呢?
如果它是安全的,如何在不抑制所有铸造错误的情况下抑制错误。
谢谢!
【问题讨论】:
-
请给我们看一个实际通话的例子。为什么不在调用中添加 argument?
-
类型转换很少是“安全的”。通常,将较大的类型转换为
char*或将任何类型转换为void*并返回到相同的类型可能是唯一一般“安全”的转换。看起来您正在转换函数指针类型。这可能会导致问题,具体取决于您所在平台的 ABI。例如,在这种情况下,可能有一个压入堆栈的参数永远不会弹出,因为被调用者不需要任何参数。
标签: c casting function-pointers