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 :
<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>
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!