是否有推荐的整数类型来存储标准C中的函数指针

时间:2013-08-24 11:42:42

标签: c c99 c11

C99标准有uintptr_t,一种推荐的整数类型,用于将数据指针(指向对象的指针)转换为,但我找不到用于存储函数指针的等效整数类型。我忽略了吗?

特定编译器可以定义这样的类型,即使它不在标准中,但编译器更可能声明函数指针可以存储在(比如)uint64_t中而不是定义新的类型。

另一个不同之处在于,对数据指针执行整数运算是有意义的,而不是在函数指针上。一个常见的习语是(int*)(((uintptr_t)p + 15) & ~(uintptr_t)15),但没有理由将这个习惯用法应用于函数指针。

3 个答案:

答案 0 :(得分:3)

没有这样的推荐指针类型。

存储指针,您可以使用任何其他函数指针类型,只要您不通过它调用您的函数。

如果您将指针转换回原始类型,则可以调用您的函数。这始终有效。

答案 1 :(得分:3)

  

我没有找到存储函数指针的等效整数类型

那是因为你无法将函数指针转换为整数。这样做会导致未定义的行为。

答案 2 :(得分:3)

要转换的函数指针没有这样的整数类型。

其中一个原因是:在某些机器上,函数地址可能非常大,比任何数据指针都大。