Casting de pointeurs vides en pointeurs de fonction en C
La conversion des pointeurs vides renvoyés par des fonctions comme dlsym() en pointeurs de fonction n'est pas simple en C . Par défaut, une telle conversion directe est interdite dans C 98/03.
Raison de la restriction
Dans C 98/03, les pointeurs void* étaient destinés à référencer des objets, pas de 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 facultativement 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 :
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;
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.
Remarque d'avertissement
Ces solutions de contournement impliquent un comportement non défini et doivent être utilisées avec discrétion.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3