【发布时间】:2012-12-17 12:57:37
【问题描述】:
在阅读一些教程并阅读有关函数指针的内容时,我了解到在 ISO C 中将 void 指针分配给函数指针显然是未定义的,有没有办法解决我在编译期间收到的警告(例如,一种更好的编码方式它)还是我应该忽略它?
警告:
ISO C forbids assignment between function pointer and 'void *' [-pedantic]
示例代码:
void *(*funcPtr)();
funcPtr = GetPointer();
GetPointer 是一个返回空指针 E.G. 的函数
void *GetPointer();
【问题讨论】:
-
不给函数指针分配一个void指针怎么样?
-
理论上未定义,因为有些机器过去代码地址和数据地址的大小不同。实际上,在当今最常见的架构中,代码和数据地址的大小相同,位于相同的地址空间中。
-
@RobertHarvey:一个常见的例子是 Posix 中的
dlsym。您必须将其结果分配给函数指针(早期的标准草案提出了一些其他名称,可能是dlfsym,以返回函数指针,但从未发生过) -
@JonathanWood GetPointer 返回一个 void* 我在原始帖子中没有注意到这一点。
-
@JonathanWood Casting 并没有让它变得更好,因为 conversion 是被禁止的,而不仅仅是 implicit 转换。 所以这包括 显式转换(强制转换)。
标签: c function-pointers void-pointers