uintptr_t/intptr_t等价于指向函数的指针?

jot*_*tik 6 c c99 language-lawyer c11

据我所知uintptr_t,并intptr_t可以用来保存任何指针void.因此,这些类型可用于存储指向数据的指针.

在C99或更高版本中,是否有类似的有符号和无符号整数类型能够保存指向函数的指针?

M.M*_*M.M 8

不,没有这样的类型.

函数指针只能被可靠地转换为其他函数指针类型(然后,只有在指向正确的函数类型时才解除引用).

6.3.2.3/6涵盖了函数指针到C中整数的转换:

任何指针类型都可以转换为整数类型.除非先前指定,否则结果是实现定义的.如果结果无法以整数类型表示,则行为未定义.结果不必在任何整数类型的值范围内.

请注意,即使整数类型足够大,也不能保证转换为整数并返回函数指针来检索原始函数指针.

在C++中,文本位于[expr.reinterpret.cast]第4点和第6点.行为类似,但它明确保证如果存在足够大小的整数,则将函数指针转换为整数并再返回会检索原始功能指针.

  • @Lundin:仅仅因为函数指针和其他指针的大小不同并不意味着指针“与地址不同”。并非每台机器都是冯诺依曼机器(事实上,由于嵌入式 CPU 的数量远远超过台式机*和*,因为 x86 在技术上不是冯诺依曼启动 [它是一个混合],我认为*大多数*系统不是冯诺依曼) . 在嵌入式中,函数指针通常比其他函数指针大(也就是说,它们通常 --- 但并不总是 --- 在 C 中无论如何填充到相同的类型)。 (2认同)