Partager via


Déclarations de typedef

Une déclaration typedef est une déclaration avec le typedef comme classe de stockage.le déclarateur devient un nouveau type.Vous pouvez utiliser des déclarations de typedef pour construire des noms plus courts ou plus explicites pour les types déjà définis par C ou pour les types que vous avez déclarés.Les noms de typedef vous permettent d'encapsuler les détails d'implémentation qui peuvent changer.

Une déclaration typedef est interprétée de la même façon qu'une variable ou une déclaration de fonction, mais l'identificateur, au lieu d'en supposant que le type spécifié par la déclaration, devient un synonyme de le type.

Syntaxe

  • declaration:
    init-déclarateur-liste ; optde déclaration-spécificateurs

  • déclaration-spécificateurs:
    déclaration-spécificateurs de stockage-classe-spécificateur opt

    déclaration-spécificateurs de spécificateur de type opt

    déclaration-spécificateurs de type-qualificateur opt

  • stockage-classe-spécificateur:
    typedef

  • spécificateur de type:
    void

    char

    short

    int

    long

    float

    double

    signé

    non signé

    struct-ou-union-spécificateur

    enum-spécificateur

    typedef-nom

  • typedef-nom:
    identifier

Notez qu'une déclaration typedef ne crée pas de types.Il crée des synonymes pour des types existants, ou les noms des types qui peuvent être spécifiés d'autres façons.Lorsqu'un nom de typedef est utilisé comme un spécificateur de type, il peut être combiné avec certains spécificateurs de type, mais pas d'autres.Les modificateurs acceptables incluent const et volatile.

Les noms de typedef partagent l'espace de noms avec les identificateurs ordinaires (consultez Les espaces de noms pour plus d'informations).Par conséquent, un programme peut avoir un nom de typedef et un identificateur de portée locale par le même nom.Par exemple :

typedef char FlagType;

int main()
{
}

int myproc( int )
{
    int FlagType;
}

En déclarant un identificateur de portée locale par le même nom qu'un typedef, ou en déclarant 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é.Cet exemple illustre cette contrainte :

typedef char FlagType;
const FlagType x;

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

const int FlagType;  /* Type specifier required */

Il n'est pas suffisant pour indiquer

const FlagType;      /* Incomplete specification */

parce qu' FlagType est pris pour faire partie du type, pas un identificateur qui est redéclarée.Cette déclaration est prise en une déclaration non conforme comme

int;  /* Illegal declaration */

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

Les noms de typedef peuvent être utilisés pour améliorer la lisibilité de code.Chacun des trois déclarations d' signal spécifient exactement le même type, le premier sans utiliser qu'aucun nom de typedef.

typedef void fv( int ), (*pfv)( int );  /* typedef declarations */

void ( *signal( int, void (*) (int)) ) ( int );
fv *signal( int, fv * );   /* Uses typedef type */
pfv signal( int, pfv );    /* Uses typedef type */

Exemples

Les exemples suivants montrent les déclarations de typedef :

typedef int WHOLE; /* Declares WHOLE to be a synonym for int */

Notez qu' WHOLE peut maintenant être utilisé dans une déclaration de variable telle qu' WHOLE i; ou const WHOLE i;.Toutefois, la déclaration long WHOLE i; est non conforme.

typedef struct club 
{
    char name[30];
    int size, year;
} GROUP;

cette instruction déclare GROUP comme un type de structure avec trois membres.Étant donné qu'une balise de structure, club, est également spécifiée, le nom de typedef (GROUP) ou la balise de structure peut être utilisée dans les déclarations.Vous devez utiliser le mot clé structure avec l'indicateur, et vous ne pouvez pas utiliser le mot clé structure avec le nom de typedef.

typedef GROUP *PG; /* Uses the previous typedef name 
                      to declare a pointer            */

Le type PG est déclaré comme pointeur vers le type d' GROUP , qui est ensuite défini comme un type structure.

typedef void DRAWF( int, int );

Cet exemple fournit le type DRAWF pour une fonction ne retourne aucune valeur et en prenant deux arguments d'int.Cela signifie, par exemple, laquelle la déclaration

DRAWF box; 

équivaut à la déclaration

void box( int, int );

Voir aussi

Référence

spécificateur de typedef