Warum enum verwenden, wenn #define genauso effizient ist? [duplicate]
Lesezeit: 2 Minuten
Ein Enum funktioniert also so:
enum {
false,
true
}
was äquivalent ist
int false = 0
int true = 1
Warum würde ich nicht ersetzen enum mit #define?
#define FALSE 0
#define TRUE 1
Für mich scheinen sie austauschbar zu sein. Das ist mir bewusst #define kann mit Argumenten umgehen, arbeitet also ganz anders als enum. Was genau sind die Hauptverwendungen von enum wenn wir haben #definein diesem Fall?
Wenn ich raten sollte, wie die #define ist eine Präprozessorfunktion, enum hätte einige Laufzeitvorteile. Wie weit bin ich weg?
Danke im Voraus.
siehe stackoverflow.com/questions/136946/…
– SirDarius
9. März 2011 um 8:56 Uhr
Seltsam, dass dieser nicht in meinen Suchergebnissen auftauchte. Vielen Dank!
– Benutzernummer
9. März 2011 um 9:02 Uhr
Es ist nicht gleichbedeutend mit int false = 0 noch zu int const false = 0 (was angemessener wäre). int Variablen hätten eine Adresse, das könnte man dann machen &falsewas Sie nicht können enum.
– Jens Gustedt
9. März 2011 um 10:40 Uhr
Beachten Sie, dass SO 136946 sowohl mit C++ als auch mit C gekennzeichnet ist. Nominell ist es keine so gute Wahl für Duplikate wie SO 1674032, das nur für C gilt, aber ich könnte vom Gegenteil überzeugt werden.
– Jonathan Leffler
30. November 2015 um 23:47 Uhr
Es ist lustig, dass ich diese Frage gefunden habe, während ich mich genau das Gegenteil gefragt habe: Warum verwenden C-Programmierer #definess statt enums.
– Hallo Engel
17. November 2018 um 9:08 Uhr
jcomeau_ictx
Die Vorteile von enum erscheinen, wenn Sie eine lange Liste von Dingen haben, die Sie Zahlen zuordnen möchten, und Sie in der Lage sein möchten, etwas in die Mitte dieser Liste einzufügen. Sie haben zum Beispiel:
Jetzt wollen Sie setzen tangerines nach oranges. Mit #defines, müssten Sie die Zahlen von neu definieren grapes, peachesund apricots. Mit enum würde es automatisch passieren. Ja, das ist ein erfundenes Beispiel, aber hoffentlich gibt es Ihnen die Idee.
Ja, jetzt sehe ich den Unterschied. Vielen Dank!
– Benutzernummer
9. März 2011 um 9:06 Uhr
Dies ist eine gute Antwort. Aber setzt voraus der Leser (der jeder NOOB sein könnte) weiß, dass sie ein deklarieren kann enum mit pears 0 und den Rest NICHT nummerieren.
– Gideon
25. November 2014 um 3:04 Uhr
Ich finde es nützlich zum Debuggen in einer Umgebung wie gdb, da Enum-Werte zur Kompilierzeit verarbeitet werden (wobei #define ein Präprozessor-Makro ist) und somit für die Selbstprüfung verfügbar sind.
Lindydancer
Obwohl Ihre Frage als C gekennzeichnet ist, gibt es beim Schreiben in C++ einen großen Vorteil, den Sie platzieren können enum:s innerhalb von Klassen oder Namespaces.
Auf diese Weise könnten Sie auf Ihre Konstanten wie verweisen SpaceshipClass::galaxy.
enum ist eine ganzzahlige Konstante. Es würde also während des Kompilierungsprozesses eine Typprüfung geben.
11864900cookie-checkWarum enum verwenden, wenn #define genauso effizient ist? [duplicate]yes
siehe stackoverflow.com/questions/136946/…
– SirDarius
9. März 2011 um 8:56 Uhr
Seltsam, dass dieser nicht in meinen Suchergebnissen auftauchte. Vielen Dank!
– Benutzernummer
9. März 2011 um 9:02 Uhr
Es ist nicht gleichbedeutend mit
int false = 0
noch zuint const false = 0
(was angemessener wäre).int
Variablen hätten eine Adresse, das könnte man dann machen&false
was Sie nicht könnenenum
.– Jens Gustedt
9. März 2011 um 10:40 Uhr
Beachten Sie, dass SO 136946 sowohl mit C++ als auch mit C gekennzeichnet ist. Nominell ist es keine so gute Wahl für Duplikate wie SO 1674032, das nur für C gilt, aber ich könnte vom Gegenteil überzeugt werden.
– Jonathan Leffler
30. November 2015 um 23:47 Uhr
Es ist lustig, dass ich diese Frage gefunden habe, während ich mich genau das Gegenteil gefragt habe: Warum verwenden C-Programmierer
#defines
s stattenum
s.– Hallo Engel
17. November 2018 um 9:08 Uhr