Freigeben über


Typedef-Deklarationen

Eine Typedef-Deklaration ist eine Deklaration mit typedef als Speicherklasse.Der Deklarator wird ein neuer Typ.Sie können Typedef-Deklarationen verwenden, um kürzeres oder aussagekräftige Namen für die Typen zu erstellen, die bereits von C definiert sind oder für Typen, die deklariert wurden.Typedef-Namen ermöglichen Ihnen die Implementierungsdetails zu kapseln, die möglicherweise ändern.

Eine Typedef-Deklaration wird auf die gleiche Weise wie eine Variable oder eine Funktionsdeklaration interpretiert, aber der Bezeichner, anstatt auf den Typ, der von der Deklaration angegeben wird, wird ein Synonym für den Typ.

Syntax

  • declaration:
    Spezifizierer deklariert INIT-Deklarator Listeopt**;**

  • Spezifizierer deklariert:
    Speicherklassenspezifizierer Deklaration Bezeichner opt

    Typspezifizierer Deklaration Bezeichner opt

    Spezifizierer Deklaration Qualifizierer TYPE opt

  • Speicherklassenspezifizierer:
    typedef

  • Typspezifizierer:
    void

    char

    short

    int

    long

    float

    double

    mit Vorzeichen

    unsigned

    Bezeichner Struktur-oder-UNION

    Spezifizierer Enumeration

    TypedefNAME

  • TypedefNAME:
    identifier

Beachten Sie, dass eine Typedef-Deklaration Typen nicht erstellt.Er erstellt Synonyme für vorhandene Typen oder Namen für Typen, die auf andere Weise angegeben werden können.Wenn ein Typedef-Name als Typspezifizierer verwendet wird, kann sie mit bestimmten Typspezifizierern, jedoch keine anderen kombiniert werden.Annehmbares Modifizierer sind const und volatile.

Typedef-Namen geben den Namespace mit gewöhnlichen Bezeichnern (weitere Informationen finden Sie unter Namespaces ).Aus diesem Grund kann ein Programm einen Typedef-Namen und eine Variable vom SCOPE-Bezeichner haben die gleichen Namen.Beispiele:

typedef char FlagType;

int main()
{
}

int myproc( int )
{
    int FlagType;
}

Beim Erstellen eines SCOPE-Bezeichner Variablen mit dem gleichen Namen wie eine Typdefinition oder wenn deklariert einen Member einer Struktur oder Union im gleichen Bereich oder in einem inneren Gültigkeitsbereich deklariert, muss der Typspezifizierer angegeben werden.Dieses Beispiel verdeutlicht diese Einschränkung:

typedef char FlagType;
const FlagType x;

Um den FlagType Namen für einen Bezeichner wiederzuverwenden, müssen ein Strukturmember oder Unionmember, der Typ bereitgestellt werden:

const int FlagType;  /* Type specifier required */

So ist z. B. nicht genügend

const FlagType;      /* Incomplete specification */

da FlagType genommen wird, um ein Teil des Typs ist kein Bezeichner, der neu deklariert wird.Durch diese Deklaration wird angenommen, dass eine ungültige Deklaration wie sein

int;  /* Illegal declaration */

Sie können jeden Typ mit typedef, einschließlich Zeiger, Funktions- und Arraytypen deklarieren.Sie können einen Typedef-Namen für einen Zeiger auf eine Struktur oder ein Union-Typ deklarieren, bevor Sie die Struktur oder Union-Typ definieren, solange die Definition die gleiche Sichtbarkeit wie die Deklaration hat.

Typedef-Namen können verwendet werden, um Code Lesbarkeit zu verbessern.Alle drei der folgenden Deklarationen von signal geben genau den gleichen Typ, den ersten, ohne Typedef-Namen zu verwenden.

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 */

Beispiele

Die folgenden Beispiele veranschaulichen Typedef-Deklarationen:

typedef int WHOLE; /* Declares WHOLE to be a synonym for int */

Beachten Sie, dass WHOLE in einer Variablendeklaration wie WHOLE i; oder const WHOLE i;nun verwendet werden kann.Allerdings würde die Deklaration long WHOLE i; ungültig sein.

typedef struct club 
{
    char name[30];
    int size, year;
} GROUP;

Diese Anweisung deklariert GROUP als Strukturtyp mit drei Member.Da ein Struktur tag wird auch clubentweder der Typedef-Name (GROUP) angegeben, oder die Struktur tag kann in Deklarationen verwendet werden.Sie müssen das struct-Schlüsselwort mit dem Tag verwenden, und Sie können das struct-Schlüsselwort mit dem Typedef-Namen nicht verwenden.

typedef GROUP *PG; /* Uses the previous typedef name 
                      to declare a pointer            */

Der Typ PG wird als Zeiger auf den GROUP-Typ deklariert, der wiederum als Strukturtyp definiert ist.

typedef void DRAWF( int, int );

Dieses Beispiel stellt den Typ DRAWF für eine Funktion bereit, die keinen Wert zurückgibt und zwei int-Argumente akzeptiert.Dies bedeutet beispielsweise, dass die Deklaration

DRAWF box; 

ähnelt der Deklaration entsprechend

void box( int, int );

Siehe auch

Referenz

Typedef-Spezifizierer