quel genre de considération vaut-il la peine de donner aux plates-formes avec un caractère non 8 bits?
les nombres magiques se produisent par exemple lors du déplacement;
la plupart de ceux-ci peuvent être traités tout simplement en utilisant CHAR_BIT et par exemple UCHAR_MAX au lieu de 8 et 255 (ou similaire).
j'espère que votre implémentation les définit :)
ce sont les problèmes "courants" .....
un autre problème indirect est de dire que vous avez:
struct xyz {
uchar baz;
uchar blah;
uchar buzz;
}
cela peut "seulement" prendre (dans le meilleur des cas) 24 bits sur une plate-forme, mais peut prendre par exemple 72 bits ailleurs .....
si chaque uchar contenait des "bit flags" et que chaque uchar n'avait que 2 bits ou flags "significatifs" que vous utilisiez actuellement, et que vous les organisiez seulement en 3 uchars pour "clarté", alors cela pourrait être relativement "plus gaspilleur" par exemple sur une plate-forme avec uchars 24 bits .....
rien que les champs de bits ne peuvent résoudre, mais ils ont d'autres choses à surveiller ...
dans ce cas, une seule énumération peut être un moyen d'obtenir le "plus petit" entier dont vous avez réellement besoin ...
peut-être pas un vrai exemple, mais des trucs comme ça me "mord" quand on porte / joue avec du code .....
juste le fait que si un uchar est trois fois plus grand que ce qui est "normalement" attendu, 100 de ces structures pourraient gaspiller beaucoup de mémoire sur certaines plates-formes ..... là où "normalement" ce n'est pas un gros problème .... .
donc les choses peuvent encore être "cassées" ou dans ce cas "gaspiller beaucoup de mémoire très rapidement" en raison de l'hypothèse qu'un uchar n'est "pas très gaspilleur" sur une plate-forme, par rapport à la RAM disponible, que sur une autre plate-forme ... ..
le problème peut être plus important, par exemple pour les ints également, ou pour d'autres types, par exemple, vous avez une structure qui a besoin de 15 bits, vous la collez donc dans un int, mais sur une autre plate-forme, un int est de 48 bits ou autre ... .
"normalement" vous pourriez le diviser en 2 uchars, mais par exemple avec un uchar 24 bits, vous n'en auriez besoin que d'un .....
donc une énumération pourrait être une meilleure solution "générique" ....
dépend de la façon dont vous accédez à ces bits :)
donc, il peut y avoir des "défauts de conception" qui leur viennent à l'esprit .... même si le code peut toujours fonctionner / fonctionner correctement quelle que soit la taille d'un uchar ou d'un uint ...
il y a des choses comme ça à surveiller, même s'il n'y a pas de "nombres magiques" dans votre code ...
j'espère que cela a du sens :)