J'ai vu du code où ils n'utilisent pas de types primitifs int, flotter, doubles, etc. directement. Ils sont généralement typés et utilisent-le ou utilisent des choses comme uint_8 etc. p>
Est-ce vraiment nécessaire même ces jours-ci? Ou est suffisamment normalisé C / C ++ qu'il est préférable d'utiliser Int, flotter, etc. directement. P>
7 Réponses :
La largeur des types primitifs dépend souvent du système, pas seulement de la norme ou du compilateur C ++. Si vous souhaitez une cohérence vraie à travers les plates-formes lorsque vous effectuez un calcul scientifique, par exemple, vous devez utiliser le uint_8 u> ou quoi que ce soit pour que les mêmes erreurs (ou erreurs de précision pour les flotteurs) apparaissent sur différentes machines, de sorte que la mémoire de mémoire est la même, etc. p>
Les types de taille fixe doivent également être utilisés pour les fichiers d'E / S binaires (en plus de traiter les problèmes d'endansion).
Les types de taille fixe ne garantissent pas que les flotteurs se comportent de même sur différentes machines.
Les tailles de types en C ne sont pas particulièrement bien normalisées. Les entiers de 64 bits sont un exemple: un entier 64 bits pourrait être long long code>, __ int64 code> ou même int code> sur certains systèmes. Pour obtenir une meilleure portabilité, C99 introduit l'en-tête int32_t code> pour obtenir un type signé exactement 32 bits; De nombreux programmes avaient leurs propres ensembles de typedfs avant cela. P>
C et C ++ Ne limitez pas la taille exacte des types numériques, les normes spécifient uniquement une plage minimale de valeurs à représenter. Cela signifie que La raison en est qu'une architecture particulière aura une taille pour laquelle l'arithmétique fonctionne plus rapidement que les autres tailles. Permettant à la mise en œuvre d'utiliser cette taille pour Cela ne va pas disparaître bientôt. Même une fois que les serveurs et les ordinateurs de bureau sont tous entièrement passés à des plates-formes 64 bits, des plates-formes mobiles et intégrées peuvent fonctionner avec une taille entière différente. Outre toute autre chose, vous ne savez pas quelles architectures pourraient être libérées à l'avenir. Si vous souhaitez que votre code soit portable, vous devez utiliser une taille de taille fixe partout où la taille de type est importante pour vous. P> int code> peut être plus grand que prévu. P>
int code> et de ne pas le forcer à utiliser un type plus étroit peut rendre l'arithmétique avec des intens plus rapidement. P>
Dans stdint.h code>, il existe également int_fastn_t code>, où la largeur du type est au moins n bits.
parce que les types comme Le code secret est vraiment assez simple. Ici, vous avez uint_8, qui est interprété p>
En d'autres termes, il s'agit d'un entier non signé avec 8 bits (minimum) ou de ce que nous avions l'habitude d'appeler, dans les brumes de l'historique de C, un "caractère non signé". P> char code>, court code>, int code>, long code>, etc., etc., sont ambiguës: ils dépendent du matériel sous-jacent. De retour dans les jours où C a été essentiellement considéré comme une langue d'assembleur pour les personnes pressées, c'était correct. Maintenant, afin d'écrire des programmes portables - ce qui signifie "des programmes qui signifient la même chose sur n'importe quelle machine" - personnes ont construit des bibliothèques spéciales de TypeDefs code> et #defines code > qui leur permettent de définir des définitions indépendantes de la machine. P>
u code> pour non signé code> li>
int code> pour dire qu'il est traité comme un nombre li>
_8 code> pour la taille dans les bits. li>
ul>
C et C ++ ne définissent pas délibérément la taille exacte d'un int. Ceci est dû à un certain nombre de raisons, mais ce n'est pas important dans l'examen de ce problème. P>
Etant donné que INT n'est pas défini sur une taille standard, ceux qui veulent une taille standard doivent faire un peu de travail pour garantir un certain nombre de bits. Le code qui définit uint_8 fait ce travail et sans elle (ni une technique comme celle-ci), vous n'auriez aucun moyen de définir un nombre de 8 bits non signé. P>
La plupart du code que je lis et écrivez, utilise uniquement les TypeDef de taille fixe uniquement lorsque la taille est une hypothèse importante dans le code. P>
Par exemple, si vous analyse d'un protocole binaire comportant deux champs 32 bits, vous devez utiliser une garantie typé pour être 32 bits, si seulement en tant que documentation. P>
Je n'utiliserais que INT16 ou INT64 lorsque la taille doit em> être celle-ci, disons pour un protocole binaire ou pour éviter de déborder ou de garder une structure petite. Sinon, utilisez simplement int. P>
Si vous faites simplement "INT I" pour utiliser I dans A pour boucle, je n'écrirais pas "int32" pour cela. Je ne m'attendrais jamais à aucune "typique" (ce qui signifie "un code intégré intégré" non bizarre ") C / C ++ code pour voir un" INT "16 bits" et la grande majorité du code C / C ++ sur la base imploserait si elles sont confrontées à 16 bits Ints. Donc, si vous commencez à vous soucier de «INT» étant 16 bit, que vous écrivez un code qui se soucie de matériel de micrologiciel intégré étrange, soit vous êtes en quelque sorte un pédant langue. Assumez simplement "INT" est le meilleur Int pour la plate-forme à portée de main et ne tapez pas de bruit supplémentaire dans votre code. P>
Si vous souhaitez un type 32 bits, utilisez uint8_t code> est plutôt inutile, car en raison d'autres exigences de la norme, il existe si et uniquement si non signé Char code> est 8 bits, auquel cas vous pouviez simplement Utilisez non signé Char code>. Les autres, cependant, sont extrêmement utiles. int code> est (et sera probablement toujours) 32 bits sur la plupart des plates-formes modernes, mais sur certaines choses anciennes, il est 16 bits et sur quelques systèmes rares précoces 64 bits, int < / code> est 64 bits. Il pourrait également être bien sûr d'être différentes tailles impaires sur les DSP. P>
int32_t code> ou uint32_t code>, et ainsi de suite. C'est beaucoup plus propre et plus facile que tous les bidons héritaux méchants de détection des tailles de types et d'essayer d'utiliser le bon vous-même ... p>