Condividi tramite


Identificatore typedef

Una dichiarazione typedef introduce un nome che, all'interno del relativo ambito, diventa sinonimo del tipo fornito dalla parte della type-declaration della dichiarazione.

typedef type-declaration synonym;

Note

È possibile utilizzare le dichiarazioni typedef per costruire nomi più brevi o più significativi per i tipi già definiti dal linguaggio o per i tipi che si sono dichiarati. I nomi di typedef consentono di incapsuliate i dettagli di implementazione che possono essere modificati.

A differenza delle dichiarazioni class, struct, union e enum, le dichiarazioni typedef non introducono nuovi tipi — introducono nuovi nomi per i tipi esistenti.

I nomi di typedef condividono il namespace con gli identificatori comuni. Pertanto, un programma può avere un nome typedef e un identificatore locale dello stesso nome.

Per ulteriori informazioni, vedere:

Esempio

// typedef_specifier1.cpp
typedef char FlagType;

int main()
{
}

void myproc( int )
{
    int FlagType;
}

Quando si dichiara un identificatore locale dello stesso nome di un typedef, o quando si dichiara un membro di una struttura o unione nello stesso ambito o in un ambito interno, l'identificatore di tipo deve essere specificato. Ad esempio:

typedef char FlagType;
const FlagType x;

Per riutilizzare il nome FlagType per un identificatore, una structure o una union, il tipo deve essere fornito:

const int FlagType;  // Type specifier required

Non è sufficiente per dire

const FlagType;      // Incomplete specification

poiché FlagType viene utilizzato per essere parte del tipo, non un identificatore che diventa ridichiarato. Questa dichiarazione viene presa come dichiarazione non valida

int;  // Illegal declaration 

È possibile dichiarare qualsiasi tipo con typedef, incluso i tipi puntatore, funzione e matrice. È possibile dichiarare un nome typedef per un puntatore a un tipo di union o di struttura prima di definire il tipo di struttura o di union, finché la definizione ha la stessa visibilità della dichiarazione.

Esempi

Un utilizzo delle dichiarazioni typedef è fare dichiarazioni più uniformi e compatte. Ad esempio:

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

Per utilizzare typedef per specificare tipi di base e derivati nella stessa dichiarazione, è possibile separare i dichiaratori con le virgole. Ad esempio:

typedef char CHAR, *PSTR;

L'esempio riportato di seguito mostra il tipo DRAWF per una funzione che non restituisce valori e che accetta due argomenti di tipo int:

typedef void DRAWF( int, int );

Dopo l'istruzione typedef, la dichiarazione

DRAWF box; 

è equivalente alla dichiarazione

void box( int, int );

typedef viene spesso combinato con struct per dichiarare e dare un nome ai tipi definiti dall'utente:

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

Vedere anche

Riferimenti

Parole chiave C++

Altre risorse

C++ Type Names