J'ai créé pour mon projet plusieurs objets "physiques" (plateformes, boutons etc...).
Pour me faciliter la vie dans la gestion de ces objets et m'éviter des switch interminables, j'ai créé une union de ces objets ainsi qu'un jeu de fonctions qui me permettent de passer par un "superviseur" d'objets qui, lui, fait le tri entre les objets.
J'ai en partie la réponse à ma question d'après les essais que j'ai effectués, mais un doute subsiste.
Je sais que la norme garanti qu'un membre de l'union a la même adresse que l'union, je peux donc libérer une union allouée en passant l'adresse de l'un de ses membres.
Je sais, par essais, que l'offset d'un membre d'une structure qui serait dans cette union est le même que dans la structure seule, pour être plus clair :
si on a :
struct myStruct
{
int a,b,c;
}
tata;
union
{
double d;
struct myStruct toto;
};
alors :
&union.toto.c - &union == &tata.c - &tata
ça fonctionne à 100% avec mingw32-gcc, ma question est surtout de savoir s'il est garanti que la padding soit le même dans l'union que dans la structure, ceci quoiqu'il arrive et quelque soit le compilo ?
Quel que soit l'endroit où est utilisée struct MyStruct, ça reste struct MyStruct, Dans l'union elle a un alignement plus contraint (celui de double) mais la structure reste la même. Le padding de la structure ne peut pas dépendre du contexte. Si tu passes à une fonction &union.toto, où si tu lui passes &tata. La fonction recevra l'adresse d'une struct MyStruct et heureusement ça aura toujours la même forme 'et pour la fonction l'alignement est celui de int pas celui de double.
Bonhomme !! | Jeu de plateforme : Prototype.
En recherche d'emploi.
Bonhomme !! | Jeu de plateforme : Prototype.