Dichiarazioni typedef
Le dichiarazioni typedef è una dichiarazione con il typedef come classe di archiviazione.il dichiaratore diventa un nuovo tipo.È possibile utilizzare le dichiarazioni typedef per costruire più breve o più nomi significativi per i tipi già definiti da C# o per i tipi dichiarato.I nomi di typedef consentono di incapsuliate i dettagli di implementazione che possono cambiare.
Le dichiarazioni typedef viene interpretata come una variabile o una dichiarazione di funzione, ma l'identificatore, anziché presupporre il tipo specificato dalla dichiarazione, diventa un sinonimo del tipo.
Sintassi
declaration:
init-dichiaratore-elenco di dichiarazione-identificatoriscegliere**;**dichiarazione-identificatori:
dichiarazione-identificatori dell'archiviazione-classe-identificatore sceglieredichiarazione-identificatori dell'tipo-identificatore scegliere
dichiarazione-identificatori di tipo-qualificatore scegliere
archiviazione-classe-identificatore:
typedefidentificatore del tipo:
voidchar
short
int
long
float
double
con segno
senza segno
struct-o-unione-identificatore
enum-identificatore
typedef-nome
typedef-nome:
identificatore
Si noti che le dichiarazioni typedef non crea i tipi.Crea sinonimi per i tipi esistenti, o i nomi dei tipi che possono essere specificati in altri modi.Quando un nome typedef viene utilizzato come identificatore di tipo, possono essere combinati con gli identificatori sicuri del tipo, ma non per altri.I modificatori accettabili sono const e volatile.
I nomi di typedef condividono lo spazio dei nomi con gli identificatori comuni (vedere Spazi dei nomi per ulteriori informazioni.Di conseguenza, un programma può avere un nome typedef e un identificatore di locale-ambito dallo stesso nome.Di seguito è riportato un esempio:
typedef char FlagType;
int main()
{
}
int myproc( int )
{
int FlagType;
}
Quando si dichiara un identificatore di locale-ambito con lo stesso nome come typedef, o quando si dichiara un membro di una struttura o unione nello stesso ambito o in un ambito interno, l'identificatore del tipo deve essere specificato.In questo esempio viene illustrato questo vincolo:
typedef char FlagType;
const FlagType x;
Per riutilizzare FlagType il nome di un identificatore, un membro della struttura, o un membro, il tipo deve essere fornito:
const int FlagType; /* Type specifier required */
Non è sufficiente per indicare
const FlagType; /* Incomplete specification */
poiché FlagType viene utilizzato per far parte del tipo, non un identificatore che è ridichiarata.Questa dichiarazione viene effettuata per essere una dichiarazione non valida come
int; /* Illegal declaration */
È possibile dichiarare qualsiasi tipo con il typedef, incluso il puntatore, la funzione e i tipi di matrice.È possibile dichiarare un nome typedef per un puntatore a un tipo di unione o della struttura prima di definire il tipo di struttura o di unione, purché la definizione ha la stessa visibilità della dichiarazione.
I nomi di typedef possono essere utilizzati per migliorare la leggibilità del codice.Tutte e tre le delle seguenti dichiarazioni di signal specificare esattamente lo stesso tipo, il primo senza utilizzare alcuni nomi di 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 */
Esempi
Negli esempi seguenti vengono illustrati le dichiarazioni typedef:
typedef int WHOLE; /* Declares WHOLE to be a synonym for int */
si noti che WHOLE può ora essere utilizzato in una dichiarazione di variabile come WHOLE i; o const WHOLE i;.tuttavia, la dichiarazione long WHOLE i; non essere valido.
typedef struct club
{
char name[30];
int size, year;
} GROUP;
Questa istruzione dichiara GROUP come un tipo di struttura con tre membri.Per un tag della struttura, club, viene specificato, o il nome typedef (GROUP) o il tag della struttura può essere utilizzato nelle dichiarazioni.È necessario utilizzare la parola chiave della struttura con il tag e non è possibile utilizzare la parola chiave della struttura con il nome typedef.
typedef GROUP *PG; /* Uses the previous typedef name
to declare a pointer */
il tipo PG viene dichiarato come puntatore a GROUP tipo, che a sua volta definito come un tipo di struttura.
typedef void DRAWF( int, int );
L'esempio fornisce il tipo DRAWF per una funzione che non restituisce valori e che accetta due argomenti di tipo int.Ciò significa, ad esempio, che la dichiarazione
DRAWF box;
equivale alla dichiarazione
void box( int, int );