Umwandeln von Void-Zeigern in Funktionszeiger in C
Das Konvertieren von Void-Zeigern, die von Funktionen wie dlsym() zurückgegeben werden, in Funktionszeiger ist in C nicht einfach . Standardmäßig ist eine solche direkte Umwandlung 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 Memberzeiger.
Bedingte Unterstützung in C 0x
In C 0x wird die Umwandlung 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:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;
Diese Problemumgehungen nutzen die Tatsache aus, dass Funktionszeigeradressen Objekte sind und mithilfe von reinterpret_cast in void**-Zeiger konvertiert werden können.
Vorsichtshinweis
Diese Problemumgehungen beinhalten undefiniertes Verhalten und sollten mit verwendet werden Diskretion.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3