Justificación de C, Revisión 5.10, abril de 2003:
Incluso con una conversión explícita, no es válido convertir un puntero de función en un puntero de objeto o un puntero en void, o viceversa.
¿Por qué exactamente no es válido convertir un puntero de función en un puntero para anular, o viceversa?
¿Cuáles son los obstáculos conceptuales/técnicos para permitir tal conversión?
Motivo: mejor comprensión de la norma.
UPD. FYI: En POSIX , dlsym devuelve un objeto válido abierto por dlopen() como void* . Luego, dicho objeto void* generalmente se convierte en un puntero de función (que no es válido según C) y se llama. Más detalles: enlace .