Is there a recommended integer type to store function pointers in standard C

StackOverflow https://stackoverflow.com/questions/18418202

  •  26-06-2022
  •  | 
  •  

Pregunta

The C99 standard has uintptr_t, a recommended integer type to convert data pointers (pointers to objects) to, but I did not find an equivalent integer type to store function pointers. Did I overlook it?

A specific compiler could define such a type even though it is not in the standard, but a compiler is more likely to state that a function pointer can be stored in (say) a uint64_t than to define a new type.

Another difference is that it can make sense to do integer arithmetic on a data pointer in ways that it doesn't on 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.

¿Fue útil?

Solución

No there is no such recommended pointer type.

To store the pointer you may use any other function pointer type, as long as you don't call your function through it.

If you convert your pointer than back to the original type you may call your function. This is always guaranteed to work.

Otros consejos

I did not find an equivalent integer type to store function pointers

That's because you can't convert function pointers to integers. Doing so results in undefined behavior.

There's no such integer type for function pointers to convert.

One of the reasons is: on some machines, function addresses can be very large, bigger than any data pointers.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top