Heim > Backend-Entwicklung > C++ > Können Sie leere Zeiger in Funktionszeiger in C umwandeln?

Können Sie leere Zeiger in Funktionszeiger in C umwandeln?

Barbara Streisand
Freigeben: 2024-11-02 21:20:30
Original
503 Leute haben es durchsucht

Can You Cast void Pointers to Function Pointers in C  ?

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:

  • Besetzung neu interpretieren:
<code class="cpp">fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
Nach dem Login kopieren
  • Variable Neuinterpretation:
<code class="cpp">fptr my_ptr = 0;
reinterpret_cast<void*&>(my_ptr) = gptr;</code>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage