221 Stimmen

Warum verwendet man typedef, wenn man ein enum in C++ deklariert?

Ich habe seit Jahren kein C++ mehr geschrieben, und jetzt versuche ich, wieder einzusteigen. Dann bin ich auf das hier gestoßen und dachte daran, aufzugeben:

typedef enum TokenType
{
    blah1   = 0x00000000,
    blah2   = 0X01000000,
    blah3   = 0X02000000
} TokenType;

Was ist das? Warum ist die typedef Schlüsselwort hier verwendet? Warum ist der Name TokenType zweimal in dieser Erklärung erscheinen? Wie unterscheidet sich die Semantik von dieser:

enum TokenType
{
    blah1 = 0x00000000,
    blah2=0x01000000,
    blah3=0x02000000
};

7voto

Tim Punkte 19787

Überbleibsel aus C.

0 Stimmen

Ich weiß nicht, ob der Qualifizierer "early" relevant ist; Sie würden das in C immer noch schreiben, wenn Sie den Typnamen ohne das Enum-Präfix verwenden wollten.

1 Stimmen

Wahr. Ich werde sie löschen. Ich habe die C-Spezifikationen schon lange nicht mehr verfolgt. Ich war zu faul, die C/C++-Unterscheidung zu überprüfen... -1 für mich.

5voto

orlandini Punkte 103

Dieser Artikel ist zwar schon etwas älter, aber ich hoffe, dass Sie den Link, den ich gleich eingeben werde, genauso zu schätzen wissen wie ich, als ich Anfang des Jahres darauf stieß.

Hier es ist . Ich sollte die Erklärung zitieren, die ich immer im Kopf habe, wenn ich einige unangenehme typedefs begreifen muss:

In Variablendeklarationen sind die eingeführten Namen Instanzen der entsprechenden Typen. [...] Wenn jedoch die typedef Schlüsselwort vor der Deklaration steht, sind die eingeführten Namen Aliasnamen der entsprechenden Typen

Wie viele Leute bereits sagten, ist es nicht notwendig, typedefs zu verwenden, die enums in C++ . Aber das ist die Erklärung der Syntax des Typedefs! Ich hoffe, es hilft (wahrscheinlich nicht OP, da es fast 10 Jahre her ist, aber jeder, der Probleme hat, diese Art von Dingen zu verstehen).

2voto

AnT Punkte 300728

Die eigentliche Antwort auf die Frage nach dem "Warum" (die überraschenderweise von den bisherigen Antworten auf diese alte Frage ignoriert wird) ist, dass enum Deklaration befindet sich wahrscheinlich in einer Header-Datei, die sowohl als C- als auch als C++-Code crosskompilierbar sein soll (d.h. sowohl in C- als auch in C++-Implementierungsdateien enthalten ist). Die Kunst, solche Header-Dateien zu schreiben, hängt von der Fähigkeit des Autors ab, Sprachmerkmale auszuwählen, die in beiden Sprachen die richtige kompatible Bedeutung haben.

1voto

AdRiX Punkte 69

In einigen C-Codestil-Leitfäden wird gesagt, dass die typedef-Version aus Gründen der "Klarheit" und "Einfachheit" bevorzugt wird. Ich stimme dem nicht zu, denn die typedef-Version verschleiert die wahre Natur des deklarierten Objekts. Tatsächlich verwende ich keine typedefs, denn wenn ich eine C-Variable deklariere, möchte ich genau wissen, was das Objekt eigentlich ist. Diese Entscheidung hilft mir selbst, mich schneller daran zu erinnern, was ein altes Stück Code eigentlich tut, und sie hilft auch anderen, wenn sie den Code in Zukunft pflegen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X