Stdint.h

Signaler
Messages postés
65
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
29 septembre 2005
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
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

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
17
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
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
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.