Maison > développement back-end > C++ > le corps du texte

Pouvez-vous convertir des pointeurs vides en pointeurs de fonction en C ?

Barbara Streisand
Libérer: 2024-11-02 21:20:30
original
450 Les gens l'ont consulté

Can You Cast void Pointers to Function Pointers in C  ?

Convertir des pointeurs vides en pointeurs de fonction en C

Convertir des pointeurs vides renvoyés par des fonctions comme dlsym() en pointeurs de fonction n'est pas simple en C . Par défaut, un tel casting direct est interdit dans C 98/03.

Raison de la restriction

Dans C 98/03, les pointeurs void* étaient destinés à référencer des objets, pas des pointeurs de fonction ou de membre.

Prise en charge conditionnelle en C 0x

En C 0x, la conversion de void* en pointeurs de fonction est éventuellement prise en charge par les implémentations. S'il est pris en charge, le comportement doit être conforme à la norme.

Solutions de contournement dépendantes de la mise en œuvre

Bien que la diffusion directe ne soit pas autorisée, ces solutions de contournement peuvent fonctionner sur la plupart des plates-formes :

  • Distribution de réinterprétation :
<code class="cpp">fptr my_fptr = reinterpret_cast<fptr>(reinterpret_cast<long>(gptr));</code>
Copier après la connexion
  • Réinterprétation variable :
<code class="cpp">fptr my_ptr = 0;
reinterpret_cast<void*&>(my_ptr) = gptr;</code>
Copier après la connexion

Ces solutions de contournement exploitent le fait que les adresses de pointeurs de fonction sont des objets et peuvent être converties en pointeurs void** à l'aide de reinterpret_cast.

Note d'avertissement

Ces solutions de contournement impliquent un comportement indéfini et doit être utilisé avec discrétion.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal