Bonjour;
Quelle est la différence entre un int et un Uint8 ou Uint32 ?
Merci d'avance
Bonjour;
Quelle est la différence entre un int et un Uint8 ou Uint32 ?
Merci d'avance
Bonjour,
En C, un int est un entier signé dont la taille dépend de la plateforme et de l'implémentation du compilateur et de la libc. En général un int fait 4 octets ou 32 bits. La représentation utilisée dépend également de la plateforme et du compilo, mais en général on utilise un complément à 2. L'endianess varie également suivant la plateforme.
Comme la représentation d'un int peut énormément varier alors que parfois on a besoin d'avoir un entier parfaitement défini, la stratégie de l'int qui peut varier de plateforme à plateforme mais qui est en général le mieux adapté à la plateforme cible peut causer des soucis de portabilité ou de transfert de données. Pour palier ce problème, la norme C99 propose la possibilité à une implémentation de C de fournir des types particuliers qui ont une certaine taille.
Donc en C99 et suivant (C11, C18 et futur C23) sont proposés les entiers à taille fixe. Mais la SDL les propose aussi sous un autre nom. UInt8 est donc un entier non signé codé sur 8 bits (U pour unsigned, int pour integer, 8 pour la taille en bit). Je te laisse deviner ce qu'est un UInt32 …
Ok, merci.
et j'ai aussi vu des Uint8_t. C'est pareil ?
Bonjour.
Oui c’est pareil. Si tu es sous Linux essayes un «man uint8_t» tu auras toutes les explications à tes questionnements de type. Sinon tape la même chose dans ton moteur de recherche préféré.
Pour être bien sûr que l’on parle de la même chose uint8_t ou Uint8 ou autres ressemblant à ces derniers ne sont que des types définis. C’est à dire utilisant le mot réservé typedef. Ici ce n’est qu’un unsigned char.
Utilisation de Glade avec Gtk+
Code::Blocks et Gtk+ sous Windows
Programmation orientée objet avec Gtk+ v3
- N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
À sa décharge, ces types sont des types de base (donc en théorie portable) dans l'entête C stdint.h (ou depuis le C+11 dans l'entête C++ cstdint)
header <cstdint> (stdint.h), lien en anglais
Édit : @Sve@r a raison. Lorsque je dis "de base", c'est parce que ces types viennent avec la librairie standard. Mais effectivement ces types ne sont pas des types par défaut.
Et c'est pour cela que je dis "À sa décharge" parce qu'il faut savoir que ces types sont dans la librairie standard est utilisable avec 1 include.
Bonjour
Le souci c'est que si (par exemple) le Uint16 est défini à partir d'un unsigned short, alors comme la norme précise qu'un unsigned short fait au moins 16 bits, rien ne lui interdit d'en faire 24 ou 32. Donc pas de taille fixe là dedans. Et si ces types ne sont pas créés artificiellement mais inclus nativement dans le langage (C99, C11) alors ils devraient être connus de mon compilateur (gcc v8 sous Debian10) or il ne les connait pas)...
Ben non, un type "de base" c'est un type connu du compilateur sans besoin d'adjonction ou de déguisement. A mon sens il n'y a que char, int, short, long, float ou double comme types de base (peut-être aussi long long et long double depuis sais plus quelle évolution). Mais si tu dois rajouter un header dans lequel le type est artificiellement créé à partir d'un de ces types qui eux sont vraiment de base (ex typedef unsigned short Uint16_t) alors ce Uint16_t n'est pas un type "de base"...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Uint16 ou équivalent est défini par SDL (je suppose) pas dans la libc. Ce n'est pas le compilateur qui «doit ou non reconnaître» ces types, mais la libc qui peut ou non les fournir ; le standard C couvre et le langage et la bibliothèque standard.
La norme (>C99) propose aux implémentations de fournir de nouveaux types entiers (signés et non) de taille fixe, si la plateforme le permet. Ces nouveaux types ne sont pas «natifs» mais des typedef de types «natifs» correspondant.
Pour les utiliser il faut inclure le header standard stdint.h sur les implémentations qui le proposent. Sous Debian tu as une libc qui doit les fournir si tu es sur une plateforme x86 et gcc8 devrait avoir pour défaut une compilation en C11 ou C17.
Mais surtout il ne faut pas oublier que le standard C ce n'est pas que le langage et le compilo … c'est une implémentation complète avec la libc. Mais c'est vrai que contrairement à C++, les deux parties compilo/libc ne sont pas écrites par les mêmes équipes en général.
source : C11 7.20 Integer types
Partager