Declaraciones de Typedef

Una declaración de tipo typedef es una declaración con el typedef como clase de almacenamiento.El declarador se convierte en un nuevo tipo.Puede utilizar declaraciones typedef para construir más corto o más nombres descriptivos para tipos ya definido por C o de tipos declarados.Los nombres de Typedef permiten encapsula los detalles de implementación que pueden cambiar.

Una declaración de tipo typedef se interpreta como una variable o una declaración de función, pero el identificador, en lugar de suponer que el tipo especificado por la declaración, se convierte en un sinónimo para el tipo.

Sintaxis

  • declaration:
    init-declarante-lista ; optde los declaración-especificadores

  • declaración-especificadores:
    declaración-especificadores de almacenamiento-clase-especificador opt

    declaración-especificadores de especificador de tipo opt

    declaración-especificadores calificador de tipo opt

  • almacenamiento-clase-especificador:
    typedef

  • especificador de tipo:
    void

    char

    short

    Valor int.

    long

    float

    double

    Signed

    Unsigned

    struct-o-unión-especificador

    enum-especificador

    typedef-nombre

  • typedef-nombre:
    identifier

Observe que una declaración de tipo typedef no crea tipos.Crea los sinónimos para los tipos existentes, o nombres para los tipos que se podrían especificados de otras maneras.Cuando un nombre typedef se utiliza como especificador de tipo, puede combinarse con algunos especificadores de tipo, pero no para otros.Incluyen aceptable const y volatilemodifiers.

Los nombres de Typedef comparten el espacio de nombres con identificadores normales (vea espacios de nombres para obtener más información).Por consiguiente, un programa puede tener un nombre typedef y un identificador de valor local-ámbito por el mismo nombre.Por ejemplo:

typedef char FlagType;

int main()
{
}

int myproc( int )
{
    int FlagType;
}

Al declarar un identificador de valor local-ámbito por el mismo nombre que un tipo typedef, o al declarar un miembro de una estructura o unión en el mismo ámbito o en un ámbito interno, el especificador de tipo debe ser especificado.este ejemplo muestra esta restricción:

typedef char FlagType;
const FlagType x;

Para reutilizar el nombre de FlagType para un identificador, un miembro de una estructura, o unión, el tipo debe ser proporcionado:

const int FlagType;  /* Type specifier required */

no es suficiente decir

const FlagType;      /* Incomplete specification */

dado que FlagType se toma para formar parte del tipo, no un identificador que volver.esta declaración se toma para ser una declaración no válida como

int;  /* Illegal declaration */

Puede declarar cualquier tipo con typedef, incluidos puntero, función, y tipos de matriz.Puede declarar un nombre typedef para un puntero a un tipo de estructura o unión antes de definir el tipo de estructura o unión, mientras la definición tiene la misma visibilidad que la declaración.

Los nombres de definiciones de tipos se pueden utilizar para mejorar la legibilidad del código.Los tres de las siguientes declaraciones de signal especifican exactamente el mismo tipo, el primer sin hacer uso de cualquier nombres 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 */

Ejemplos

Los ejemplos siguientes muestran declaraciones typedef:

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

Observe que WHOLE se puede utilizar ahora en una declaración de variable como WHOLE i; o const WHOLE i;.Sin embargo, la declaración long WHOLE i; sería válida.

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

esta instrucción declara GROUP como una estructura escrita con tres miembros.Desde una etiqueta de estructura, club, también se especifica, o el nombre typedef (GROUP) o la etiqueta de la estructura se puede utilizar en declaraciones.Debe utilizar la palabra clave struct con la etiqueta, y no se puede usar la palabra clave struct con el nombre typedef.

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

Declare el tipo PG como puntero al tipo de GROUP , que a su vez se define como un tipo de estructura.

typedef void DRAWF( int, int );

este ejemplo proporciona el tipo DRAWF para una función que no devuelve ningún valor y que toma dos argumentos de int.Esto significa, por ejemplo, que la declaración

DRAWF box; 

es equivalente a la declaración

void box( int, int );

Vea también

Referencia

especificador typedef