Element TypeDef deklaracji
Deklaracja element typedef jest deklaracja z elementu typedef jako klasy magazynowania.; Niewłaściwy deklarator staje się nowego typu.Element typedef deklaracji można użyć do konstruowania krótszy lub bardziej znaczące nazwy dla typów zdefiniowanych przez c lub typów, które zostały zgłoszone.Element TypeDef nazwy umożliwiają hermetyzowania szczegóły dotyczące implementacji, które mogą ulec zmianie.
Deklaracja element typedef jest interpretowane w taki sam sposób jak zmienna lub deklaracji funkcji, ale identyfikator, zamiast typu określonego w oświadczeniu, zakładając staje się synonimem typu.
Składnia
declaration:
Specyfikatory deklaracji w init listy; niewłaściwy deklarator opt**;**Specyfikatory deklaracji:
Specyfikator klasy magazynowania deklaracji Specyfikatory optDeklaracja Specyfikatory specyfikatora typu opt
Typ kwalifikatora deklaracji Specyfikatory opt
Specyfikator klasy magazynowania:
typedefSpecyfikator typu:
nieważneCHAR
krótkie
int
długie
Pływak
podwójne
podpisane
niepodpisane
Specyfikator struct lub Unii
Specyfikator Enum
Nazwa elementu TypeDef
Nazwa elementu TypeDef:
Identyfikator
Uwaga deklaracji typedef nie powoduje utworzenia typów.Tworzy synonimów dla istniejących typów lub nazwy dla typów, które może być określony w inny sposób.Nazwa elementu typedef używanego jako specyfikatora typu, można połączyć z niektórych specyfikatorze typu, ale niekoniecznie.Modyfikatory dopuszczalne obejmują const i volatile.
Element TypeDef nazwy udostępniać obszar nazw identyfikatorów zwykłych (zobacz Obszarów nazw Aby uzyskać więcej informacji).W związku z tym program może mieć nazwę elementu typedef i identyfikatora zakresu lokalnego o tej samej nazwie.Na przykład:
typedef char FlagType;
int main()
{
}
int myproc( int )
{
int FlagType;
}
W przypadku deklarowania identyfikator zakresu lokalnego o tej samej nazwie jak element typedef lub deklarowanie członek struktury lub Unii, w tym samym zakresie lub w zakresie wewnętrznej, musi być określona specyfikatora typu.Ten przykład ilustruje to ograniczenie:
typedef char FlagType;
const FlagType x;
Aby ponownie użyć FlagType należy podać nazwę dla identyfikatora, członek struktury lub członkiem Unii, typ:
const int FlagType; /* Type specifier required */
Nie jest wystarczające, aby powiedzieć
const FlagType; /* Incomplete specification */
Ponieważ FlagType przyjmuje się część tego typu, nie identyfikator, który jest przy redeclared.Deklaracja ta przyjmuje się nielegalnych deklaracji, podobnie jak
int; /* Illegal declaration */
Można zadeklarować dowolnego typu z element typedef, w tym wskaźnik, funkcji i typów tablicowych.Nazwa elementu typedef dla wskaźnika do struktury lub Unii typu można zadeklarować przed zdefiniowaniem typu Struktura lub Unii tak długo, jak definicja ma taką samą widoczność jak zgłoszenia.
Element TypeDef nazwy, można poprawić czytelność kodu.Wszystkie trzy następujące deklaracje signal określić dokładnie tego samego typu, najpierw bez dokonywania wszelkich nazwy elementu 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 */
Przykłady
Poniższe przykłady ilustrują typedef deklaracji:
typedef int WHOLE; /* Declares WHOLE to be a synonym for int */
Należy zauważyć, że WHOLE może teraz być używany w deklaracji zmiennej takich jak WHOLE i; lub const WHOLE i;.Jednakże deklaracji long WHOLE i; może być nielegalne.
typedef struct club
{
char name[30];
int size, year;
} GROUP;
Ta instrukcja deklaruje GROUP jako typ struktury z trzech członków.Od znaczników struktury club, również jest określony, nazwa elementu typedef (GROUP) lub znaczników struktury mogą być używane w deklaracji.Należy użyć słowa kluczowego struct ze znacznikiem i nie można użyć słowa kluczowego struct z nazwą elementu typedef.
typedef GROUP *PG; /* Uses the previous typedef name
to declare a pointer */
Typ PG jest zadeklarowana jako wskaźnik do GROUP typu, który z kolei jest zdefiniowana jako typ struktury.
typedef void DRAWF( int, int );
W poniższym przykładzie przedstawiono typ DRAWF dla funkcji zwracać wartość nie i podjęcie dwa argumenty int.Oznacza to, na przykład, że deklaracja
DRAWF box;
jest odpowiednikiem deklaracji
void box( int, int );