typedef – specifikátor
Definice typedef zavádí název, který se, v rámci své působnosti, stane synonymem pro typ daný částí deklarace typu deklarace.
typedef type-declaration synonym;
Poznámky
Deklarace typedef je možné použít pro vytvoření kratších nebo výstižnějších názvů pro typy, které jsou již definovány jazykem, nebo vlastní deklarované typy.Jména typedef umožňují zapouzdřit podrobnosti implementace, které se mohou změnit.
Na rozdíl od deklarací class, struct, union a enum, deklarace typedef nezavádí nový typ, ale zavádí nová jména pro existující typy.
Názvy typedef sdílí obor názvů s běžnými identifikátory.Program tedy může mít typedef název a identifikátor místního rozsahu se stejným názvem.
Další informace naleznete v části:
Příklad
// typedef_specifier1.cpp
typedef char FlagType;
int main()
{
}
void myproc( int )
{
int FlagType;
}
Při deklarování identifikátoru místního rozsahu se stejným názvem jako typedef nebo při deklarování členu struktury nebo union ve stejném rozsahu nebo ve vnitřním rozsahu, musí být určen specifikátor typu.Příklad:
typedef char FlagType;
const FlagType x;
Pro znovupoužíti jména FlagType pro identifikátor, člen struktury nebo člen union, musí být určen typ:
const int FlagType; // Type specifier required
Nestačí říct
const FlagType; // Incomplete specification
protože FlagType se rozumí část typu, nikoli identifikátor, který je znovu deklarován.Tato deklarace je neplatná deklarace jako například
int; // Illegal declaration
Pomocí typedef je možné deklarovat jakýkoli typ, včetně ukazatele, funkce a typů polí.Je možné deklarovat název typedef pro ukazatel na strukturu nebo typ union před definováním struktury nebo typu union, dokud má definice stejnou viditelnost jako deklarace.
Příklady
Jedno z použití deklarací typedef je vytvoření jednotnějších a kompaktnějších deklarací.Příklad:
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;"
Pro použití typedef pro specifikaci základních a odvozených typů ve stejné deklaraci, je možné oddělit deklarátory čárkami.Příklad:
typedef char CHAR, *PSTR;
Následující příklad poskytuje typ DRAWF pro funkci nevracející žádnou hodnotu a přijímající dva celočíselné argumenty:
typedef void DRAWF( int, int );
Po výše uvedeném příkazu typedef, bude deklarace
DRAWF box;
ekvivalentní deklaraci
void box( int, int );
typedef je často spojeno se struct pro deklarování a pojmenování uživatelem definovaných typů:
// 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);
}