Envoyé par
gl
Soit dit au passage, C99 ne résous ce problème puisque le support des types intX_t est optionnel et qu'un environnement peut donc être conforme C99 sans les proposer.
Evidemment, parce qu'il n'est pas garanti que l'unité d'allocation sur toutes les machines soit un sous-multiple de X. Mais ça peut résoudre quelque chose :
Du moment que tu développes un programme qui ait besoin d'un entier de taille
exactement égale à X bits, cela signifie que tu cibles tout au plus une famille d'architectures bien déterminées et que ton programme ne doit fonctionner que
SI ce type existe. La norme C99 dit justement que si un tel type existe sur la cible, qu'il soit défini sinon, qu'il ne soit pas défini. Si ton programme utilisant intX_t ne compile pas, c'est qu'il n'a aucune chance de fonctionner correctement sur la plateforme cible (et dans ce cas, on admettra qu'une erreur à la compilation est de loin meilleur qu'une erreur à l'exécution ...). Si tu veux quand même qu'il fonctionne, alors c'est le choix de int16_t même qui était une erreur (aurais-tu du utiliser short par exemple ...).
Il n'est pas portable de supposer qu'un short ait exactement 16 bits. Par contre il est tout à fait portable de supposer qu'un short puisse contenir tout nombre compris entre -32767 et 32767.
Sauf comme je viens de le répéter, que ce n'est pas ce que je cherche.
Partager