Partilhar via


Declarações de TypeDef

Uma declaração de typedef é uma declaração com typedef como a classe de armazenamento.O Declarador torna-se um novo tipo.Você pode usar as declarações de typedef para construir nomes mais curtos ou mais significativas para tipos já definidos por c ou para tipos que você tenha declarado.Nomes de TypeDef permitem encapsular os detalhes de implementação que podem ser alterados.

Uma declaração de typedef é interpretada da mesma forma como uma variável ou declaração de função, mas o identificador, em vez de, supondo que o tipo especificado pela declaração, torna-se um sinônimo para o tipo.

Sintaxe

  • declaration:
    especificadores de declaração init-Declarador-list opt**;**

  • especificadores de declaração:
    especificadores de declaração de especificador de classe de armazenamento opt

    especificadores de declaração de especificador de tipo opt

    especificadores de declaração de qualificador de tipo opt

  • especificador de classe de armazenamento:
    typedef

  • especificador de tipo:
    Void

    char

    short

    int

    long

    float

    double

    assinado

    não assinado

    especificador de struct ou união

    especificador de enum

    nome de TypeDef

  • nome de TypeDef:
    identifier

Observe que uma declaração de typedef não cria tipos.Ele cria os sinônimos de tipos existentes ou nomes para tipos que podem ser especificados em outras maneiras.Quando um nome de typedef é usado como um especificador de tipo, ela pode ser combinada com determinados especificadores de tipo, mas não outros.Modificadores aceitáveis incluem const e volatile.

Nomes de TypeDef compartilham o espaço de nome com identificadores comuns (consulte Espaços para nome para obter mais informações).Portanto, um programa pode ter um nome de typedef e um identificador de escopo de local com o mesmo nome.Por exemplo:

typedef char FlagType;

int main()
{
}

int myproc( int )
{
    int FlagType;
}

Ao declarar um identificador de escopo de local com o mesmo nome como um typedef ou ao declarar um membro de uma estrutura ou união no mesmo escopo ou em um escopo interno, o especificador de tipo deve ser especificado.Este exemplo ilustra essa restrição:

typedef char FlagType;
const FlagType x;

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

const int FlagType;  /* Type specifier required */

Não é suficiente dizer

const FlagType;      /* Incomplete specification */

porque o FlagType é considerada como parte do tipo, não um identificador que está sendo declarado novamente.Essa declaração é considerada como uma declaração ilegal 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 uma estrutura ou tipo de união antes de definir o tipo de estrutura ou união, contanto que a definição tenha a mesma visibilidade que a declaração.

TypeDef nomes podem ser usados para melhorar a legibilidade do código.Todos os três seguintes declarações de signal especificar exatamente o mesmo tipo, o primeiro sem fazer uso de quaisquer nomes 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 */

Exemplos

Os exemplos a seguir ilustram typedef declarações:

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

Observe que WHOLE agora pode ser usado em uma declaração de variável, como WHOLE i; ou const WHOLE i;.No entanto, a declaração long WHOLE i; seria ilegal.

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

Esta instrução declara GROUP como um tipo de estrutura com três membros.Desde uma marca de estrutura, club, também for especificado, o nome de typedef (GROUP) ou a marca de estrutura pode ser usada em declarações.Você deve usar a palavra-chave struct com a marca, e não é possível usar a palavra-chave struct com o nome de typedef.

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

O tipo de PG é declarado como um ponteiro para o GROUP tipo, que por sua vez é definido como um tipo de estrutura.

typedef void DRAWF( int, int );

Este exemplo fornece o tipo de DRAWF para uma função que retornam nenhum valor e dê dois argumentos int.Isso significa, por exemplo, que a declaração

DRAWF box; 

é equivalente à declaração

void box( int, int );

Consulte também

Referência

Especificador de TypeDef