Si vous voulez utiliser Qt , vous devez embrasser quint8
, quint16
et ainsi de suite.
Si vous souhaitez utiliser GLib, vous devez accueillir guint8
, guint16
et ainsi de suite.
Sur Linux il y a u32
, s16
et ainsi de suite.
uC/OS définit SINT32
, UINT16
et ainsi de suite.
Et si vous devez utiliser une combinaison de ces choses, vous feriez mieux de vous préparer aux ennuis. Parce que sur votre machine u32
sera typedef
d sur long
et quint32
sera typedef
d sur int
et le compilateur se plaindra.
Pourquoi tout le monde fait ça, s'il y a <stdint.h>
? Est-ce une sorte de tradition pour les bibliothèques?
stdint.h
n'existait pas lors du développement de ces bibliothèques. Ainsi, chaque bibliothèque a créé ses propres typedef
s.
Pour les anciennes bibliothèques, cela est nécessaire car l'en-tête en question (stdint.h
) n'existait pas.
Il y a cependant toujours un problème: ces types (uint64_t
et autres) sont ne fonctionnalité optionnelle dans la norme. Une implémentation conforme peut donc ne pas être livrée avec eux - et forcer ainsi les bibliothèques à les inclure de nos jours.
stdint.h
a été normalisé depuis 1999. Il est plus probable que de nombreuses applications définissent (en fait des alias) des types pour maintenir une indépendance partielle par rapport à l'architecture de la machine sous-jacente.
Ils donnent aux développeurs la certitude que les types utilisés dans leur application correspondent aux hypothèses spécifiques à leur projet sur le comportement qui peut ne pas correspondre à la norme de langage ou à l'implémentation du compilateur.
La pratique se reflète dans le modèle de conception orienté objet Façade et est très utilisée de manière abusive par les développeurs qui écrivent invariablement des classes wrapper pour toutes les bibliothèques importées.
Lorsque les compliants étaient beaucoup moins standard et que les architectures des machines pouvaient varier de 16 bits, 18 bits à 6 bits mainframes de longueur de mot, cela était beaucoup plus à prendre en compte. La pratique est beaucoup moins pertinente maintenant dans un monde convergeant sur des systèmes embarqués 32 bits ARM. Elle reste une préoccupation pour les microcontrôleurs bas de gamme avec impair cartes mémoire.
Vous avez donc le pouvoir de taper le caractère en int.
Un "horreur de codage" a mentionné qu'un en-tête d'entreprise avait un point où un programmeur voulait une valeur booléenne, et un caractère était le type natif logique pour le travail, et a donc écrit typedef bool char
. Plus tard, quelqu'un a trouvé un entier comme le choix le plus logique et a écrit typedef bool int
. Le résultat, bien avant Unicode, était pratiquement typedef char int
.
Beaucoup de réflexion avant-gardiste, de compatibilité ascendante, je pense.