• # Non garantie du compilateur

    Posté par . En réponse au message Les espacements que mettent les compilateurs C dans les structures sont ils toujours les mêmes ?. Évalué à -1.

    Attention à plusieurs choses:

    1- selon votre machine, surtout si vous avez des machines <32bits (même rarement ces temps ci) vous pouvez aussi jouer avec les mots clés du compilo (si dispo) du genre aligned ou packed (voir https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html)

    2- il se peut aussi que le compilateur casse l'ordre des champ de la structure pour réorganiser par taille. Si vous voulez maitriser votre structure, il est de bon usage de toujours spécifier vos champs par ordre décroissant de taille.

    3- par expérience, sauf besoin spécifiques, il faut se passer un maximum des types uintXX_t. n'utiliser que des types primitifs (char, int, long, ...) suffit largement et permet surtout de s'affranchir de la machine cible. Par contre, si l'on doit faire communiquer 2 machines différents (ex 32 et 64 bits) les typer uintXX_t sont pratique et ne sont que des macros sur les types primitifs de la machines (char, int, long, ...)

    4- pour maitriser un padding implicite du compilo on peut aussi faire un padding explicite dans la structure que nous voulons.