Looking for c Keywords? Try Ask4Keywords

C LanguageTypedef


Einführung

Mit dem typedef Mechanismus können Aliase für andere Typen erstellt werden. Es werden keine neuen Typen erstellt. Menschen verwenden typedef häufig, um die Portabilität von Code zu verbessern, um Aliase für Struktur- oder typedef zu vergeben oder um Aliase für Funktions- (oder Funktionszeiger-) Typen zu erstellen.

In der C-Norm wird typedef als "Speicherklasse" klassifiziert. es tritt syntaktisch auf, wo Speicherklassen wie static oder extern könnten.

Syntax

  • typedef Vorhandener_Name Alias_Name;

Bemerkungen


Nachteile von Typedef

typedef kann in großen C-Programmen zur Verschmutzung des Namensraums führen.

Nachteile von Typedef-Strukturen

Auch typedef 'd-Strukturen ohne Tag-Namen sind eine Hauptursache für unnötige Auferlegung von Ordnungsbeziehungen zwischen Header-Dateien.

Erwägen:

#ifndef FOO_H
#define FOO_H 1

#define FOO_DEF (0xDEADBABE)

struct bar; /* forward declaration, defined in bar.h*/

struct foo {
    struct bar *bar;
};

#endif

Mit einer solchen Definition nicht mit typedefs , ist es möglich , dass eine Übersetzungseinheit umfassen foo.h am bekommen FOO_DEF Definition. Wenn nicht versucht wird, den bar Member der foo Struktur zu bar.h Datei bar.h nicht bar.h werden.

Typedef vs #define

#define ist eine C-Vorprozessor-Direktive, die auch zur Definition der Aliase für verschiedene Datentypen verwendet wird, die typedef ähnlich sind, jedoch mit den folgenden Unterschieden:

  • typedef kann nur Typen symbolische Namen geben, bei denen mit #define auch Alias ​​für Werte definiert werden kann.

  • typedef Interpretation wird vom Compiler ausgeführt, während die Anweisungen #define vom Vorprozessor verarbeitet werden.

  • Beachten Sie, dass #define cptr char * gefolgt von cptr a, b; macht nicht dasselbe wie typedef char *cptr; gefolgt von cptr a, b; . Mit der #define , b ist ein einfacher char variable, aber es ist auch ein Zeiger mit dem typedef .

Typedef Verwandte Beispiele