Void-Zeiger in Funktionszeiger in C umwandeln
Void-Zeiger, die von Funktionen wie dlsym() zurückgegeben werden, in Funktionszeiger umzuwandeln, ist in C nicht einfach . Standardmäßig ist ein solches direktes Casting in C 98/03 verboten.
Grund für die Einschränkung
In C 98/03 waren void*-Zeiger für die Referenzierung von Objekten gedacht, keine Funktions- oder Mitgliedszeiger.
Bedingte Unterstützung in C 0x
In C 0x wird das Umwandeln von void* in Funktionszeiger optional von Implementierungen unterstützt. Wenn unterstützt, muss das Verhalten dem Standard entsprechen.
Implementierungsabhängige Problemumgehungen
Direktes Casting ist zwar nicht zulässig, diese Problemumgehungen funktionieren jedoch möglicherweise auf den meisten Plattformen:
<code class="cpp">fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
<code class="cpp">fptr my_ptr = 0; reinterpret_cast<void*&>(my_ptr) = gptr;</code>
Diese Problemumgehungen nutzen die Tatsache aus, dass Funktionszeigeradressen Objekte sind und mit reinterpret_cast in void**-Zeiger konvertiert werden können.
Vorsichtshinweis
Diese Problemumgehungen beinhalten undefiniertes Verhalten und sollte mit Diskretion verwendet werden.
Das obige ist der detaillierte Inhalt vonKönnen Sie leere Zeiger in Funktionszeiger in C umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!