Ich habe gelesen, dass das Konvertieren eines Funktionszeigers in einen Datenzeiger und umgekehrt auf den meisten Plattformen funktioniert, aber nicht garantiert funktioniert. Warum ist das so? Sollten nicht beide einfach Adressen im Hauptspeicher sein und daher kompatibel sein?
void
. Die Konvertierung eines Funktionszeigers in void *
darf die Darstellung nicht verändern. Ein void *
Wert, der sich aus einer solchen Konvertierung ergibt, kann ohne Informationsverlust mithilfe einer expliziten Umwandlung wieder in den ursprünglichen Funktionszeigertyp konvertiert werden. Hinweis : Der ISO C-Standard verlangt dies nicht, ist jedoch für die POSIX-Konformität erforderlich.
dlsym()
- beachten Sie das Ende des Abschnitts 'Anwendungsnutzung', in dem es heißt: Beachten Sie, dass die Konvertierung von einem void *
Zeiger in einen Funktionszeiger wie in: fptr = (int (*)(int))dlsym(handle, "my_function");
nicht durch den ISO C-Standard definiert ist. Dieser Standard erfordert, dass diese Konvertierung bei konformen Implementierungen ordnungsgemäß funktioniert.