Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Nous recommandons d’utiliser Visual Studio 2017

typedef, spécificateur

Une déclaration typedef introduit un nom qui, dans sa portée, devient un synonyme pour le type donné par la partie déclaration de type de la déclaration.

typedef type-declaration synonym;

Utilisez des déclarations de typedef pour construire des noms plus courts ou plus explicites pour des types déjà définis par le langage ou pour des types que vous avez déclarés. Les noms typedef vous permettent d'encapsuler des détails d'implémentation qui peuvent changer.

Contrairement aux déclarations classe, struct, union, et enum, les déclarations, typedef n'introduisent pas de nouveaux types — ils introduisent de nouveaux noms pour des types existants.

Les noms typedef partagent l'espace de noms avec les identificateurs ordinaires. Par conséquent, un programme peut avoir un nom typedef et un identificateur de portée locale ayant le même nom.

Pour plus d'informations, consultez :

// typedef_specifier1.cpp
typedef char FlagType;

int main()
{
}

void myproc( int )
{
    int FlagType;
}

Quand vous déclarez un identificateur de portée locale ayant le même nom qu'un typedef, ou quand vous déclarez un membre d'une structure ou d'une union dans la même portée ou dans une portée interne, le spécificateur de type doit être spécifié. Par exemple :

typedef char FlagType;
const FlagType x;

Pour réutiliser le nom FlagType pour un identificateur, un membre de structure ou d'union, le type doit être fourni :

const int FlagType;  // Type specifier required

Il ne suffit pas de dire

const FlagType;      // Incomplete specification

puisque FlagType est pris pour faire partie du type, et non pas un identificateur qui est en train d'être redéclaré. Cette déclaration est prise en une déclaration non conforme comme

int;  // Illegal declaration 

Déclarez tout type avec typedef, notamment les types pointeur, fonction et tableau. Déclarez un nom typedef pour un pointeur vers une structure ou pour un type union avant de définir la structure ou le type union, tant que la définition a la même visibilité que la déclaration.

Exemples

Une utilisation des déclarations typedef est de rendre les déclarations plus uniformes et compactes. Par exemple :

typedef char CHAR;          // Character type.
typedef CHAR * PSTR;        // Pointer to a string (char *).
PSTR strchr( PSTR source, CHAR target );
typedef unsigned long ulong;
ulong ul;     // Equivalent to "unsigned long ul;"

Pour utiliser typedef afin de spécifier des types fondamentaux et dérivés dans la même déclaration, séparez les déclarateurs par des virgules. Par exemple :

typedef char CHAR, *PSTR;

L'exemple suivant fournit le type DRAWF pour une fonction ne retournant aucune valeur et prend deux arguments entiers :

typedef void DRAWF( int, int );

Après l'instruction typedef ci-dessus, la déclaration

DRAWF box; 

serait équivalent à la déclaration

void box( int, int );

typedef est souvent associé à struct pour déclarer et nommer les types définis par l'utilisateur :

// typedef_specifier2.cpp
#include <stdio.h>

typedef struct mystructtag
{
    int   i;
    double f;
} mystruct;

int main()
{
    mystruct ms;
    ms.i = 10;
    ms.f = 0.99;
    printf_s("%d   %f\n", ms.i, ms.f);
}
10   0.990000

Référence

Autres ressources

Afficher: