can(u)intmax_t是否包含函数指针?

124*_*123 4 c

是一个uintmax_t保证大是否需要持有一个函数指针?

我知道这个:

以下类型指定无符号整数类型,能够表示任何无符号整数类型的任何值:

uintmax_t
Run Code Online (Sandbox Code Playgroud)

下面的类型指定一个无符号整数类型,其属性是任何有效的void指针都可以转换为此类型,然后转换回指向void的指针,结果将比较原始指针:uintptr_t

并且一个void-Pointer可能不大,只能保存一个函数指针,因此uintptr_t也可能不足以容纳一个函数指针.

ric*_*ici 5

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扩展.)