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

时间:2016-04-04 13:13:45

标签: c language-lawyer c99 c11

Afaik uintptr_tintptr_t可用于保存指向void的任何指针。因此,这些类型可用于存储指向数据的指针。

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

1 个答案:

答案 0 :(得分:7)

不,没有这样的类型。

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

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

  

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

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

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