The C99 standard has uintptr_t , the recommended integer type for converting data pointers (pointers to objects) to, but I have not found an equivalent integer type for storing function pointers. Did I miss this?
A specific compiler can determine this type even if it does not conform to the standard, but the compiler is more likely to state that a function pointer can be stored in (for example) a uint64_t than to define a new type.
Another difference is that it makes sense to do integer arithmetic on a data pointer in ways that it did not point to a function pointer. One common idiom is (int*)(((uintptr_t)p + 15) & ~(uintptr_t)15) , but there is no reason to apply this idiom to a function pointer.
source share