Partager via


Spécificateurs de type C

Les spécificateurs de type dans les déclarations définissent le type d'une variable ou d'une déclaration de fonction.

Syntaxe

type-specifier: voidcharshortintlongfloatdoublesignedunsignedstruct-or-union-specifierenum-specifiertypedef-name

Les types signed char, signed int, signed short int et signed long int, avec leurs équivalents unsigned et enum, sont appelés types intégraux. Les spécificateurs de type float, double et long double sont appelés types flottants ou à virgule flottante. Vous pouvez utiliser n'importe quel spécificateur de type intégral ou à virgule flottante dans une variable ou une déclaration de fonction. À l’origine, si un type-specifier n’a pas été fourni dans une déclaration, il a été considéré comme int. Le compilateur Microsoft n’accepte plus les déclarations int par défaut.

Les mots clés facultatifs signed et unsigned peuvent précéder ou suivre tout type intégral, à l’exception de enum, et peuvent également être utilisés seuls comme spécificateurs de type, auquel cas ils sont compris respectivement comme signed int et unsigned int. Utilisé seul, le mot clé int est supposé être signed. Utilisés seuls, les mots clés long et short sont compris comme long int et short int.

Les types énumération sont considérés comme des types de base. Les spécificateurs de type pour les types énumération sont traités dans Déclarations d'énumération.

Le mot clé void a trois utilisations : spécifier un type de retour de fonction, spécifier une liste de types d'arguments pour une fonction qui n'accepte pas d'argument et spécifier un pointeur vers un type non spécifié. Vous pouvez utiliser le type void pour déclarer des fonctions qui ne retournent aucune valeur ou pour déclarer un pointeur vers un type non spécifié. Pour plus d’informations sur void lorsqu’il apparaît seul entre les parenthèses qui suivent un nom de fonction, consultez Arguments.

Section spécifique à Microsoft

La vérification de type est maintenant conforme à la spécification ANSI, ce qui signifie que les types short et int sont distincts. Par exemple, cet exemple présente une redéfinition dans le compilateur C Microsoft qui était acceptée par les versions précédentes du compilateur.

int   myfunc();
short myfunc();

Cet exemple suivant génère également un avertissement concernant l'indirection vers différents types :

int *pi;
short *ps;

ps = pi;  /* Now generates warning */

Le compilateur C Microsoft génère également des avertissements pour les différences de signe. Par exemple :

signed int *pi;
unsigned int *pu;

pi = pu;  /* Now generates warning */

Les expressions void de type sont évaluées quant à leurs effets secondaires. Vous ne pouvez en aucune manière utiliser la valeur (inexistante) d’une expression de type void, ni convertir une expression void (par conversion implicite ou explicite) en un type autre que void. Si vous utilisez une expression d'un autre type dans un contexte où une expression void est requise, sa valeur est ignorée.

Pour respecter la spécification ANSI, le type void** ne peut pas être utilisé à la place du type int**. Seul le type void* peut être utilisé comme pointeur vers un type non spécifié.

FIN de la section spécifique à Microsoft

Vous pouvez créer des spécificateurs de type supplémentaires avec des déclarations typedef, comme décrit dans Déclarations typedef. Pour plus d'informations sur la taille de chaque type, consultez Stockage des types de base.

Voir aussi

Déclarations et types
typeof, __typeof__ (C23)
typeof_unqual, __typeof_unqual__ (C23)