He leído que convertir un puntero de función en un puntero de datos y viceversa funciona en la mayoría de las plataformas, pero no se garantiza que funcione. ¿Por qué es este el caso? ¿No deberían ser ambas direcciones simplemente en la memoria principal y, por lo tanto, ser compatibles?
void
. La conversión de un puntero de función a void *
no alterará la representación. Un void *
valor resultante de dicha conversión se puede volver a convertir al tipo de puntero de función original, utilizando una conversión explícita, sin pérdida de información. Nota : El estándar ISO C no requiere esto, pero se requiere para la conformidad POSIX.
dlsym()
: observe el final de la sección 'Uso de la aplicación' donde dice: Tenga en cuenta que la conversión de un void *
puntero a un puntero de función como en: fptr = (int (*)(int))dlsym(handle, "my_function");
no está definida por el estándar ISO C. Este estándar requiere que esta conversión funcione correctamente en implementaciones conformes.