Compartilhar via


Especificador typedef

Uma declaração typedef introduz um nome que, dentro de seu escopo, se torna um sinônimo para o tipo fornecido pela parte de declaração do tipo da declaração.

typedef type-declaration synonym;

Comentários

Você pode usar declarações de typedef para construir nomes mais curtos ou mais significativos para os tipos já definidos pelo idioma ou para os tipos que você declarou. Os nomes de typedef permitem que você encapsule os detalhes da implementação que podem ser alterados.

Em contraste com declarações class, struct, union e enum, as declarações de typedef não introduzem novos tipos — introduzem novos nomes para tipos existentes.

Os nomes de typedef compartilham o namespace com os identificadores comuns. Portanto, um programa pode ter um nome de typedef e um identificador de escopo local com o mesmo nome.

Para obter mais informações, consulte:

Exemplo

// typedef_specifier1.cpp
typedef char FlagType;

int main()
{
}

void myproc( int )
{
    int FlagType;
}

Ao declarar um identificador de escopo local com o mesmo nome de um typedef, ou ao declarar um membro de uma estrutura ou de uma união no mesmo escopo ou em um escopo interno, o especificador do tipo deverá ser especificado. Por exemplo:

typedef char FlagType;
const FlagType x;

Para reutilizar o nome FlagType para um identificador, um membro da estrutura ou da união, o tipo deve ser fornecido:

const int FlagType;  // Type specifier required

Não é suficiente indicar

const FlagType;      // Incomplete specification

pois FlagType é tomado como parte do tipo, não como um identificador que redeclarado. Esta declaração é executada para ser uma declaração inválida como

int;  // Illegal declaration 

Você pode declarar qualquer tipo com typedef, incluindo o ponteiro, função e tipos de matriz. Você pode declarar um nome de typedef para um ponteiro para um tipo de estrutura ou união antes de definir o tipo da estrutura ou de união, contanto que a definição tenha a mesma visibilidade da declaração.

Exemplos

Um uso de declarações typedef é tornar as declarações mais uniformes e compactas. Por exemplo:

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 usar typedef para especificar tipos fundamentais e derivados na mesma declaração, você pode separar os declaradores com vírgulas. Por exemplo:

typedef char CHAR, *PSTR;

O exemplo a seguir fornece o tipo DRAWF para uma função que não retorna valor e que usa dois argumentos int:

typedef void DRAWF( int, int );

Após a instrução de typedef anterior, a declaração

DRAWF box; 

é equivalente à declaração

void box( int, int );

typedef é combinado com frequência com struct para declarar e nomear tipos definidos pelo usuário:

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

Consulte também

Referência

Palavras-chave C++

Outros recursos

C++ Type Names