web-dev-qa-db-fra.com

Quel est le type de données «court» en C?

Dans la fonction suivante:

void AddWordData(FILE* dataFile, short Word, int* dc)
{
    fprintf(dataFile, "%06o\n", Word);
    ++(*dc);
} 

la fonction obtient un type court. J'ai fait quelques recherches sur le Web mais je n'ai trouvé que de courts int. qu'est-ce que cela signifie lorsqu'une fonction obtient un type court? de quel type de données s'agit-il?

11
Yuval

short est l'abréviation de short int. Ils sont synonymes. short, short int, signed short, et signed short int sont tous du même type de données. Le nombre exact de bits dans un short dépend du compilateur et du système, mais il doit avoir au moins 16 bits :

Tout compilateur conforme à la norme doit également respecter les limites suivantes en ce qui concerne la plage de valeurs qu'un type particulier peut accepter. Notez que ce sont des limites inférieures: une implémentation est libre de dépasser tout ou partie de celles-ci. Notez également que la plage minimale pour un caractère dépend de si oui ou non un caractère est considéré comme signé ou non signé. ... short int: -32767 à +32767.

Plus de Wikipedia :

La taille réelle des types entiers varie selon l'implémentation. La seule garantie est que le long long n'est pas plus petit que long, ce qui n'est pas plus petit que int, ce qui n'est pas plus petit que court. De plus, int doit être le type entier avec lequel le processeur cible est le plus efficace. Cela permet une grande flexibilité: par exemple, tous les types peuvent être 64 bits. Cependant, seuls plusieurs schémas de largeur entiers différents (modèles de données) sont populaires et puisque le modèle de données définit la façon dont les différents programmes communiquent, un modèle de données uniforme est utilisé dans une interface d'application de système d'exploitation donnée. [3]

Dans la pratique, il convient de noter que char a généralement une taille de 8 bits, short a généralement une taille de 16 bits et long a généralement une taille de 32 bits (également char non signé, short non signé et long non signé). Par exemple, cela est vrai pour des plates-formes aussi diverses que Sun0S 4 Unix des années 1990, Microsoft MSDOS, Linux moderne et Microchip MCC18 pour les microcontrôleurs PIC 8 bits intégrés.

Éditer:

Sous LP64 (tous les systèmes d'exploitation 64 bits non Windows): char est 8 bits, short est 16 bits, int est 32 bits, long est 64 bits et long long peut être 128 bits.

Windows conserve LLP64: char est 8 bits, short est 16 bits, int est 32 bits, long est 32 bits et long long est 64 bits.

23
Claudiu