Deklarace TypeDef
Deklarace typedef je prohlášení s typedef jako třídy úložiště.Declarator se stane nový typ.Můžete vytvořit názvy kratší nebo smysluplnější c již definované typy nebo typy, které jsou deklarovány typedef prohlášení.Názvy TypeDef umožňují zapouzdření podrobnosti implementace, které mohou změnit.
Deklarace typedef interpretována stejným způsobem jako proměnné nebo deklaraci funkce, ale identifikátoru namísto typ zadaný v prohlášení, za předpokladu, že se stane synonymum typu.
Syntaxe
declaration:
Specifikátory prohlášení init-declarator seznam opt**;**Specifikátory prohlášení:
prohlášení specifikátoru třídy úložiště specifikátory optspecifikátor typu prohlášení specifikátory opt
typ kvalifikátoru prohlášení specifikátory opt
úložiště tříd::
typedefspecifikátor typu:
anulovatchar
short
int
long
float
double
podepsaný
bez znaménka
Struktura nebo unie specifikátor
Specifikátor enum
Název definice TypeDef
Název definice TypeDef:
identifikátor
Poznámka: definice typedef prohlášení není vytvořit typy.Vytvoří synonyma pro existující typy nebo názvy typů, které může být určen jinými způsoby.Název definice typedef slouží jako specifikátor typu, lze kombinovat s některými specifikátorech typu, ale jiné ne.Modifikátory přijatelné patří const a volatile.
Názvy TypeDef sdílet název místa s běžným identifikátory (viz Mezery v názvu Další informace).Program lze tudíž typedef název a identifikátor oboru místního se stejným názvem.Příklad:
typedef char FlagType;
int main()
{
}
int myproc( int )
{
int FlagType;
}
Při deklarování identifikátor oboru místního stejný název jako definice typu nebo deklaraci struktury nebo unie ve stejném oboru nebo vnitřní oboru, musí být zadán specifikátor typu.Tento příklad ukazuje tato omezení:
typedef char FlagType;
const FlagType x;
Znovu použít FlagType název identifikátoru, člen struktura nebo člen union, typ musí být uvedeny:
const int FlagType; /* Type specifier required */
Nestačí říci
const FlagType; /* Incomplete specification */
protože FlagType bude součástí typu není identifikátor, který je znovu deklarována.Toto prohlášení se rozumí nelegální prohlášení jako
int; /* Illegal declaration */
Chcete-li deklarovat libovolného typu s typedef, včetně ukazatele, funkce a typy polí.Můžete deklarovat název definice typedef ukazatel na strukturu nebo typ union před definovat typ struktury nebo unie jako definice jsou stejně viditelné jako prohlášení.
Definice TypeDef názvy lze zlepšit čitelnost kódu.Všechny tři následující prohlášení o signal zadejte přesně stejný typ, nejprve bez provedení jakékoli názvy 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 */
Příklady
Následující příklady ilustrují typedef prohlášení:
typedef int WHOLE; /* Declares WHOLE to be a synonym for int */
Všimněte si, že WHOLE nelze nyní použít v deklaraci proměnné jako WHOLE i; nebo const WHOLE i;.Však prohlášení long WHOLE i; by bylo neplatné.
typedef struct club
{
char name[30];
int size, year;
} GROUP;
Toto prohlášení prohlašuje GROUP jako typ struktury se tři členové.Od tag struktury club, také zadán název definice typedef (GROUP) nebo značka struktury lze v prohlášení.Musíte použít klíčové slovo struktura se značkou a nelze použít s názvem typedef struct klíčové slovo.
typedef GROUP *PG; /* Uses the previous typedef name
to declare a pointer */
Typ PG je deklarován jako ukazatel na GROUP typ, který je zase definován jako typ struktury.
typedef void DRAWF( int, int );
Tento příklad představuje typ DRAWF funkce vracet žádnou hodnotu a vezme dva argumenty int.To například znamená, že prohlášení
DRAWF box;
je ekvivalentní prohlášení
void box( int, int );