Gast
#5606600
Hi, was ist vorteilhafter von enums oder defines? Oder ist es sogar egal? z.B.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
|
Anzeige
|
Enum oder defines?
Gast
#5606600
Hi, was ist vorteilhafter von enums oder defines? Oder ist es sogar egal? z.B.
In C ist es weitgehend egal. In C++ würde ich enum (oder enum class) verwenden, weil da die Typprüfung strenger ist und weil sich enums dort an Namespaces halten. Enums haben den Vorzug, daß man sich nicht um die Verwaltung der dahintersteckenden numerischen Werte kümmern muss, und daß Doppelungen (zwei verschiedene Namen für den gleichen Wert) ausgeschlossen sind. Damit sind sie einfachem Textersatz durch #defines auch in normalem deutlich überlegen. Man muss sich halt im klaren über die Einschränkungen sein, enums sind in C eine sehr primitive Kiste und als Datentyp weitestgehend unbrauchbar, zumal sie eben alle im selben Namensraum liegen. Damit ist es unmöglich, in zwei verschiedenen Enums den gleichen Namen zu verwenden. Sie sind aber als strukturierendes Element zu gebrauchen (das in erster Linie der Quelltextdokumentation dient), d.h. man weiß, welche Werte logisch zusammengehören, was bei #defines nur von der Disziplin des Quelltextschreibers abhängt, und sie haben, wie schon erwähnt, den Vorzug der Doublettenvermeidung.
Gast
#5606657
Mike schrieb: > was ist vorteilhafter von enums oder defines? enums, wenn Du etwas aufzählst (enumeration = Aufzählung). Defines, wenn der isolierte Wert so und nicht anders zu sein hat, z.B. Bitmasken oder Register-Adressen. Ein #define aus einem fremden *.h hat hier mal heimlich Textersatz in meinem Programm gemacht, ein sehr schöner Fehler. Seit dem gibt es #define nur noch, um komplizierte Initialisierungen schöner schreiben zu können. In C ist "const" zwar nicht soo toll, aber immer noch besser als #define.
enum missbrauche ich auch für Bitmasken; jede Fehlermeldung vom Compiler hilft!
Gast
#5606874
Bauform B. schrieb: > static const char bga_letters[] = "ABCDEFGHJKLMNPRTUVWY"; > static const int AFMAX = 16; Und wie geht das in einem header??? meinst du sowas?
Gast
#5606934
Bauform B. schrieb: > typedef enum temperature_enum { > T_UNDEF, // keine Daten > ... Mmmh, was hat das Ganze mit "Aufzählung" zu tun? Für mich ist das eine Paradebeispiel für ein #define. naja, es ist eine Aufzählung von Konstanten, die alle etwas mit Temperaturen zu haben, nur ausnahmsweise nicht lückenlos von 0 bis n. Es mag unmoralisch sein, aber es ist nicht verboten und es macht nicht dick ;) Was könnte #define an dieser Stelle besser?
Gast
#5606948
So nebenbei: da du schon das unbekannte T_0C verwendest, kannst du die 90 auch gegen dein "define" T_C_MUL ersetzen. ;-) und zur Frage: Bei deinen Berechnungen darf es bei den Werte keine Dopplung geben. Keine Ahnung, ob das nicht Überüberübermorgen passieren kann. Deine Aufgabenstellung sieht nach einer Nachschlagtabelle aus. Damit Überüberübermorgen Dritte dein Programm verstehen können, sllte die Lösung nahe der Problemstellung sein. C erlaubt leider jede Menge Schmutz. Und das ist auch ein Grund für mangelnde Produktqualität. Du zeigst uns wieder eine Parade-Beispiel. ;-) Fragen ueber Fragen schrieb: > Deine Aufgabenstellung sieht nach einer Nachschlagtabelle aus. Wo siehst Du das? Und - wo würde ein #define daran irgendwas verändern? Bevor Du "Schmutz" unterstellst, solltest Du vielleicht besser verstehen, was Du da versuchst, zu beurteilen. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|