103 votes

Pourquoi tout le monde typedef sur types C standard ?

Si vous souhaitez utiliser Qt, vous devez embrasser quint8, quint16 et ainsi de suite.

Si vous souhaitez utiliser la GLib, vous avez à 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, il vaut mieux être préparé pour la difficulté. Parce que sur votre machine, u32 sera typedefd long et quint32 sera typedefd int et le compilateur va se plaindre.

Pourquoi tout le monde le faire, si il y a <stdint.h>? Est-ce une sorte de tradition pour les bibliothèques?

80voto

Edward Karak Points 693

n’existait pas à l’époque où ces bibliothèques étaient en cours d’élaboration. Donc chaque bibliothèque fait sien s.

40voto

Ven Points 7349

Pour les bibliothèques les plus âgés, ceci est nécessaire parce que l’en-tête en question ( `` ) n’existait pas.

Il y a toujours, cependant, un problème autour : ces types ( `` et autres) sont une fonctionnalité facultative dans la norme. Donc une implémentation conforme ne peut pas expédier avec eux--et ainsi forcer les bibliothèques pour les inclure encore de nos jours.

13voto

Pekka Points 1555

stdint.h a été normalisé depuis 1999. Il est plus probable que de nombreuses applications définir (alias) types de maintenir une indépendance partielle de la sous-tendent l'architecture de la machine.

Ils fournissent aux développeurs de confiance que les types utilisés dans leur application correspond à leur projet d'hypothèses précises sur le comportement qui peut ne pas correspondre à la langue standard ou le compilateur de mise en œuvre.

La pratique se reflète dans l'orienté objet Façade modèle de conception est bien maltraité par les développeurs invariablement écrit classes wrapper pour toutes les bibliothèques importées.

Lorsque des cas de déviation ont été beaucoup moins standard et architectures de machines peut varier de 16 bits, 18 bits par le biais de 36 bits, la longueur de mot de mainframes c'était beaucoup plus de considération. La pratique est beaucoup moins pertinents aujourd'hui dans un monde convergent sur 32-bit ARM systèmes embarqués. Il reste un sujet de préoccupation pour les bas de gamme de microcontrôleurs avec impair de cartes mémoire.

3voto

JonathanHayward Points 1356

Si vous avez le pouvoir de typedef char en int.

Un "codage de l'horreur" mentionné que l'une des sociétés de l'en-tête a un point où un programmeur voulait une valeur booléenne, et un char a été la logique type natif pour le travail, et c'est ce qu'écrivait typedef bool char. Puis plus tard, quelqu'un a trouvé un nombre entier pour être le choix le plus logique, et écrivit typedef bool int. Le résultat, âges avant Unicode, a été pratiquement typedef char int.

Beaucoup de la prospective, de l'avant de compatibilité, je pense.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X