Strukturen in C++: Was ist der Unterschied zwischen struct und typedef struct – eine Erklärung für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Anfänger bei struct und typedef struct verwirrt sind?

\n\n

Wenn Sie jemals auf Stack Overflow nach einer Antwort auf die Frage „Difference between 'struct' and 'typedef struct' in C++?“ gesucht haben, ist Ihnen sicherlich aufgefallen, dass dieses Thema tausende von Aufrufen gesammelt hat. Und das ist kein Zufall. Viele angehende C++-Entwickler, insbesondere diejenigen, die aus der C-Welt kommen oder alte Lehrbücher lesen, stoßen auf die seltsame Syntax mit typedef struct und sind aufrichtig verwirrt: Warum ein zusätzliches Wort schreiben, wenn man einfach struct schreiben kann?

\n\n

In diesem Artikel werden wir ein für alle Mal klären, worin der Unterschied zwischen struct und typedef struct im modernen C++ besteht. Wir werden uns die historischen Wurzeln dieser Verwirrung ansehen, einige Codebeispiele schreiben und klare Empfehlungen geben, wie man es richtig macht. Los geht's!

\n\n

Was ist struct in C++?

\n\n

Beginnen wir mit den Grundlagen. Eine Struktur (struct) in C++ ist ein benutzerdefinierter Datentyp, der mehrere Variablen (Felder) unter einem Namen zusammenfasst. Im Gegensatz zu einer Klasse haben alle Member einer Struktur standardmäßig den Zugriffsmodifikator public, aber ansonsten sind struct und class in C++ praktisch identisch (ja, eine Struktur kann Methoden, Konstruktoren und sogar Vererbung haben).

\n\n

Die Deklaration einer Struktur im modernen C++ sieht so aus:

\n\n
// Einfache Struktur\nstruct Point {\n    int x;\n    int y;\n};\n\nint main() {\n    Point p1;          // OK: Objekt erstellen\n    p1.x = 10;\n    p1.y = 20;\n    return 0;\n}
\n\n

Alles einfach und elegant. Aber woher kommt dann typedef struct?

\n\n

Historischer Hintergrund: Das Erbe der Sprache C

\n\n

Die Sache ist die, dass man in der Sprache C, um eine Variable eines eigenen Strukturtyps zu erstellen, unbedingt das Schlüsselwort struct vor den Namen der Struktur schreiben musste. Zum Beispiel:

\n\n
// In C so:\nstruct Point p1;  // ohne das Wort struct – Fehler
\n\n

Um diese Unannehmlichkeit zu beseitigen, erfanden C-Programmierer einen Trick mit typedef:

\n\n
// C-Stil: typedef + struct\ntypedef struct {\n    int x;\n    int y;\n} Point;\n\nint main() {\n    Point p1;  // jetzt ohne struct möglich\n    return 0;\n}
\n\n

Diese Syntax erstellt einen Alias für eine namenlose Struktur. In C war das sehr praktisch. Aber in C++ funktioniert alles anders.

\n\n

Braucht man typedef struct in C++?

\n\n

Die kurze Antwort: nein, nicht nötig. Im modernen C++ (ab dem Standard C++98 und später) wird der Name der Struktur automatisch zum Typnamen. Sie können ihn ohne das Schlüsselwort struct verwenden.

\n\n

Vergleichen Sie die beiden Ansätze:

\n\n
// Ansatz 1: Reines C++ (empfohlen)\nstruct Point {\n    int x, y;\n};\n\nPoint p1;  // OK\n\n// Ansatz 2: Veralteter C-Stil (nicht empfohlen)\ntypedef struct {\n    int x, y;\n} Point;\n\nPoint p2;  // auch OK, aber warum der Aufwand?
\n\n

Beide Varianten werden kompiliert, aber die erste ist kürzer, verständlicher und entspricht modernen Codierungsstandards. Die zweite Variante ist einfach eine Gewohnheit, die aus C übernommen wurde.

\n\n

Wann kann typedef struct dennoch nützlich sein?

\n\n

Es gibt einige Situationen, in denen typedef struct in C++ gerechtfertigt sein kann:

\n\n
    \n
  • Plattformübergreifender Code in C und C++. Wenn Sie eine Header-Datei schreiben, die sowohl in C als auch in C++ kompiliert werden soll (z. B. für eine Bibliothek), ist es besser, typedef struct zu verwenden – so funktioniert der Code überall.
  • \n
  • Erstellen eines Alias für einen komplexen Typ. Manchmal wird typedef mit Templates oder Zeigern auf Strukturen verwendet, um die Syntax zu vereinfachen.
  • \n
  • Kompatibilität mit Legacy-Code. Wenn Sie ein altes Projekt warten, das im C-Stil geschrieben ist, ist es besser, den bestehenden Stil nicht zu brechen.
  • \n
\n\n

Aber wenn Sie ein neues Projekt in reinem C++ schreiben, vergessen Sie typedef struct.

Blogs

Buchempfehlungen