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

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

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

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

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

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

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

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

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

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

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