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.
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.
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?
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.