是一个uintmax_t
保证大是否需要持有一个函数指针?
我知道这个:
以下类型指定无符号整数类型,能够表示任何无符号整数类型的任何值:
Run Code Online (Sandbox Code Playgroud)uintmax_t
和
下面的类型指定一个无符号整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将比较原始指针:uintptr_t
并且一个void-Pointer可能不大,只能保存一个函数指针,因此uintptr_t也可能不足以容纳一个函数指针.
C标准中没有这样的保证.
首先,不能保证任何指针都可以无损地转换为整数类型(NULL指针除外).确实,uintptr_t
必须能够无损地表示void指针(因此任何onject指针).但是,无法保证实现具有uintptr_t
,因为它intptr_t
是可选的(第7.20.1.4节的最后一句).
其次,函数指针不是对象指针,并且不一定可以将其转换为void指针并返回.因此,即使uintptr_t
存在,也可能不足以容纳函数指针.
在X/Open System Interface(XSI)兼容实现(大多数Posix系统)上,您必须能够在void指针和函数指针之间进行转换,并且uintptr_t必须存在.那么在这种情况下,你确实有保证.(dlsym
系统接口需要void和函数指针之间的可转换性,在第7期(2008)中,系统接口从XSI移动到基本Posix.但是,uintptr_t的存在仍然是XSI扩展.)