Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

type punning et cast

11 réponses
Avatar
ld
Je suis entrain de mettre en place la gestion des plug-in dans COS et
je suis tomb=E9 sur le probl=E8me de devoir convertir un pointeur void* en
pointeur de fonction void (*)(void). Dans la documentation de dlym
(Linux et Open Posix), il est recommand=E9 de faire:

void (*symbol)(void);

*(void**) &symbol =3D dlsym(lib_handle, symbol_name);

avec void *dlsym(void*, const char*), qui selon eux est valide. Mais
avec gcc4 j'ai un magnifique

warning: dereferencing type-punned pointer will break strict-aliasing
rules

pour =E9liminer le warning (que je ne veux pas d=E9sactiver) je passe par
une variable interm=E9diaire

void **tmp =3D (void**)&symbol;

*tmp =3D dlsym(lib_handle, symbol_name);

et le warning dispara=EEt.

Alors est-ce que le probl=E8me est r=E9solu (et portable) ou j'ai
seulement tromp=E9 gcc? Ca sent le UB =E0 plein nez tout ca, non?

a+, ld.

1 réponse

1 2
Avatar
nicolas.sitbon
On 28 juil, 16:22, Bruno Ducrot wrote:
On 2009-07-28, nicolas.sitbon wrote:

> Cette partie de la norme n'existe que dans le nouveau draft POSIX
> 2008, non encore implémenté, et est encore activement discuté par les
> membres de l'opengroup.
> J'attend moi aussi avec impatience LE pointeur de fonction génériqu e
> mais il faut encore patienter...

Pour une raison que j'ignore, j'etais persuade que ca faisait partie
de la norme et non du draft.

--
Bruno Ducrot

--  Which is worse:  ignorance or apathy?
--  Don't know.  Don't care.



Bonne nouvelle, je viens de vérifier de nouveau, et il semble que ce
texte vient d'être définitivement adopté moyennant certaine
restrictions (qui ne nous concernent pas dans ce cas précis).
Pour ceux que ça intéresse, voici le lien :
https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl &source=L&listname=austin-group-l&id478
reste plus qu'à se mettre en conformité dans les implémentations.
Cordialement.
1 2