„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können Sie in C++ ungültige Zeiger in Funktionszeiger umwandeln?

Können Sie in C++ ungültige Zeiger in Funktionszeiger umwandeln?

Veröffentlicht am 08.11.2024
Durchsuche:278

Can You Cast void Pointers to Function Pointers in C  ?

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:

  • Neu interpretieren Besetzung:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
  • Variable Neuinterpretation:
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.

Neuestes Tutorial Mehr>

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