Stdint.h

anarchysniper Messages postés 65 Date d'inscription jeudi 28 août 2003 Statut Membre Dernière intervention 29 septembre 2005 - 11 févr. 2005 à 00:53
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 11 févr. 2005 à 23:08
La librairie stdint est censée fournir des type indépendants du système.



Cependant, dans le header, pour les int,



/* 7.18.1.1 Exact-width integer types */

typedef signed char int8_t;

typedef unsigned char uint8_t;

typedef short int16_t;

typedef unsigned short uint16_t;

typedef int int32_t;

typedef unsigned uint32_t;

typedef long long int64_t;

typedef unsigned long long uint64_t;



Deux questions :



1. Qu'est-ce qu'un char fout là ? L'a-t-on utilisé car il fait toujours 8 octets ?



2. Faire dépendre des variables qui doivent être indépendantes du
système de types de base (short, int, long), eux dépendants du système
... ça semble bizarre. Ce ne serait pas tourner en rond ? Ces variables
"indépendantes" sont elles fiables ?



Merci d'avance ^^ !

2 réponses

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
11 févr. 2005 à 14:21
salut,

pour moi "Exact-width integer types
" ca veut dire types entiers (de largeur exacte)...

je ne suis pas sur, mais pour moi :
- un char : tjs un octet
- un short : tjs deux octets
- un long : tjs 4 octets
- un long long : tjs 8 octets
seul (unsigned) int dépend de la platform ...

ShareVB
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
11 févr. 2005 à 23:08
Un char n'est rien d'autre qu'un entier en C (en C++ c'est légèrement différent, ca reste tout de même un type scalaire).



Pour les tailles, la norme ne fix rien (ca pourrait nuire à la portabilité du C), mais :


<li>un char à toujours une taille en byte, mais la notion de byte en
C indique la plus petite plage adressable en bits et non un octet.
C'est la constante CHAR_BIT qui indique le nombre de bits (digit
binaire) utilisés pour coder l'entier.</li>
<li>apres on à juste une relation char <= short <= int <=
long, habituelllement long est codé sur 32 bits, et int correspond au
mot machine (taille des registres ALU par ex) car c'est en quelque
sorte le type initial du C et que c'était la ca fonction. Inutile de
préciser que pour des raison de performances, il vaut mieux utiliser au
maximun le type int.

</li>
<li>l'opérateur sizeof renvoi une taille en char, donc sizeof(char)
est toujours égale à 1. Pour connaitre de manière portable le nombre de
bits utilisés pour coder un entier, il suffit d'afficher
sizeof(int)*CHAR_BIT par exemple.</li>

Le fichier d'entete stdint.h est donc trés utile pour manipuler des entiers de taille fixe indépendament de l'architecture.
0
Rejoignez-nous