Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En typedef-deklaration är en deklaration med typedef som lagringsklass. Deklaratorn blir en ny typ. Du kan använda typedef-deklarationer för att skapa kortare eller mer meningsfulla namn för typer som redan definierats av C eller för typer som du har deklarerat. Med Typedef-namn kan du kapsla in implementeringsinformation som kan ändras.
En typedef-deklaration tolkas på samma sätt som en variabel eller funktionsdeklaration, men identifieraren blir i stället för att anta den typ som anges i deklarationen synonym för typen.
Syntax
              declaration:
 
              declaration-specifiers
              init-declarator-list
              välja;
              declaration-specifiers:
 
              storage-class-specifier
              declaration-specifiers
              välja
 
              type-specifier
              declaration-specifiers
              välja
 
              type-qualifier
              declaration-specifiers
              välja
              storage-class-specifier:
 typedef
              type-specifier:
 void
 char
 short
 int
 long
 float
 double
 signed
 unsigned
 struct-or-union-specifier
 enum-specifier
 typedef-name
              typedef-name:
 identifier
En typedef-deklaration skapar inte nya typer. Den skapar synonymer för befintliga typer eller namn för typer som kan anges på andra sätt. När ett typedef-namn används som typspecificerare kan det kombineras med vissa typspecificerare, men inte andra. Acceptabla modifierare inkluderar const och volatile.
Typedef-namn delar namnutrymmet med vanliga identifierare. Mer information finns i Namnutrymmen. Därför kan ett program ha ett typedef-namn och en lokal omfångsidentifierare med samma namn. Till exempel:
typedef char FlagType;
int main()
{
}
int myproc( int )
{
    int FlagType;
}
När du deklarerar en lokal omfångsidentifierare med samma namn som en typedef, eller när du deklarerar en medlem i en struktur eller union i samma omfång eller i ett inre omfång, måste du också ange typspecificeraren. Det här exemplet illustrerar den här begränsningen:
typedef char FlagType;
const FlagType x;
Om du vill återanvända FlagType namnet på en identifierare, en strukturmedlem eller en fackföreningsmedlem måste typen anges:
const int FlagType;  /* Type specifier required */
Det räcker inte att säga
const FlagType;      /* Incomplete specification */
              FlagType eftersom anses vara en del av typen, inte en identifierare som redeclared. Denna förklaring anses vara en olaglig förklaring som
int;  /* Illegal declaration */
Du kan deklarera vilken typ som helst med typedef, inklusive pekare, funktion och matristyper. Du kan deklarera ett typedef-namn för en pekare till en struktur- eller unionstyp innan du definierar strukturen eller unionstypen, så länge definitionen har samma synlighet som deklarationen.
Typedef-namn kan användas för att förbättra kodens läsbarhet. Alla tre av följande deklarationer signal anger exakt samma typ, den första utan att använda några typedef-namn.
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 */
Exempel
Följande exempel illustrerar typedef-deklarationer:
typedef int WHOLE; /* Declares WHOLE to be a synonym for int */
Kan till exempel WHOLE nu användas i en variabeldeklaration som WHOLE i; eller const WHOLE i;. Deklarationen long WHOLE i; skulle dock vara olaglig.
typedef struct club
{
    char name[30];
    int size, year;
} GROUP;
Den här instruktionen deklarerar GROUP som en strukturtyp med tre medlemmar. Eftersom en strukturtagg, club, också anges, kan antingen typedef-namnet (GROUP) eller strukturtaggen användas i deklarationer. Du måste använda nyckelordet struct med taggen och du kan inte använda nyckelordet struct med typedef-namnet.
typedef GROUP *PG; /* Uses the previous typedef name
                      to declare a pointer            */
Typen PG deklareras som en pekare till GROUP typen, som i sin tur definieras som en strukturtyp.
typedef void DRAWF( int, int );
Det här exemplet innehåller typen DRAWF för en funktion som inte returnerar något värde och tar två int-argument. Det innebär till exempel att deklarationen
DRAWF box;
motsvarar deklarationen
void box( int, int );