typedef (Especificador)

Una declaración typedef introduce un nombre que, dentro de su ámbito, se convierte en un sinónimo del tipo especificado por la parte type-declaration de la declaración.

typedef type-declaration synonym;

Comentarios

Puede utilizar declaraciones typedef para construir nombres más cortos o más significativos para tipos ya definidos por el lenguaje o para tipos que ha declarado. Los nombres de typedef permiten encapsular detalles de la implementación que pueden cambiar.

A diferencia de las declaraciones class, struct, union y enum, las declaraciones typedef no introducen tipos nuevos, sino nombres nuevos para tipos existentes.

Los nombres de typedef comparten el espacio de nombres con los identificadores normales. Por tanto, un programa puede tener un nombre de typedef y un identificador de ámbito local con el mismo nombre.

Para obtener más información, vea:

Ejemplo

// typedef_specifier1.cpp
typedef char FlagType;

int main()
{
}

void myproc( int )
{
    int FlagType;
}

Al declarar un identificador de ámbito local con el mismo nombre que un typedef, o al declarar un miembro de una estructura o una unión en el mismo ámbito o en un ámbito interno, se debe indicar el especificador de tipo. Por ejemplo:

typedef char FlagType;
const FlagType x;

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

const int FlagType;  // Type specifier required

No basta con decir

const FlagType;      // Incomplete specification

porque se considera que FlagType forma parte del tipo, no un identificador que se va a volver a declarar. Esta declaración se considera no válida como

int;  // Illegal declaration 

Es posible declarar cualquier tipo con typedef, incluidos los tipos de puntero, función y matriz. Se puede declarar un nombre de typedef para un puntero a un tipo de estructura o de unión antes de definir el tipo de estructura o de unión, siempre y cuando la definición tenga la misma visibilidad que la declaración.

Ejemplos

Un uso de las declaraciones typedef consiste en hacer que las declaraciones sean más uniformes y compactas. Por ejemplo:

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;"

Para utilizar typedef con el fin de especificar tipos fundamentales y derivados en la misma declaración, se pueden separar los declaradores mediante comas. Por ejemplo:

typedef char CHAR, *PSTR;

El ejemplo siguiente proporciona el tipo DRAWF para una función que no devuelve ningún valor y que toma dos argumentos int:

typedef void DRAWF( int, int );

Después de la instrucción typedef anterior, la declaración

DRAWF box; 

sería equivalente a la declaración

void box( int, int );

typedef se suele combinar con struct para declarar y asignar nombre a tipos definidos por el usuario:

// 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);
}
  

Vea también

Referencia

Palabras clave de C++

Otros recursos

C++ Type Names