lilith2k3 hat geschrieben:
@Hello World
Es gibt keinen vernünftigen Grund, den Präprozessor zum definieren von Konstanten zu verwenden
Wie wäre es mit dem Argument: Übersichtlichkeit?
Makros machen überhaupt nichts übersichtlicher, im Gegenteil. Das grundlegende Problem beim Präprozessor ist, dass er komplett unabhängig von der eigentlichen C-Syntax ist. So gelten z. B. Scoping-Regeln bei Makros nicht, der Präprozessor ist eine hirnlose Suchen-und-Ersetzen-Funktion.
Dazu habe ich übrigens eine schöne Geschichte. Ich brauchte einmal ein __attribute__((noinline)) in einem Kernelmodul. Das kompiliert im Userspace wunderbar, im Kernel aber nicht. Nach längerer Suche habe ich dann festgestellt, dass "noinline" im Kernel ein Makro für __attribute__((noinline)) ist, so dass der Compiler also __attribute__((__attribute__((noinline)))) sieht, womit er natürlich nichts anfangen kann, und die Fehlermeldung war äußerst verwirrend.
Ein mindestens ebenso wichtiger Nachteil ist, dass man Präprozessormakros nicht im Debugger sehen kann. Mal ein Beispiel:
enum Farbe {ROT,GRUEN,GELB,BLAU};
enum Farbe Farbe_meines_Autos = GELB;
Wenn ich jetzt im Debugger "print Farbe_meines_Autos" eingebe, so wird er mir "GELB" anzeigen. Im Gegensatz dazu:
#define ROT = 0
#define GRUEN = 1
#define GELB = 2
#define BLAU = 3
int Farbe_meines_Autos = GELB;
Wenn ich mir jetzt im Debugger die Farbe_meines_Autos ausgeben lasse, wird er mir 2 sagen, und ich muss erst nachsehen, was das für eine Farbe ist, und das ist extrem nervig, da Konstanten eben sehr häufig auftauchen.
Inhaltlich hast du recht!
Aber ich finde es dann lesbarer :]
Lesbar ist, was idiomatisch ist, und sizeof(char) ist das IMO nicht.
na dann lieber ne const-Variable
Warum, es handelt sich doch nur um eine Symbolische Konstante?
Darf ich fragen, was der Unterschied zwischen einer "symbolischen" Konstante und anderen Konstanten sein soll? Für Konstanten gibt es in C das const-Schlüsselwort, Makros haben da einfach keinen Platz.
Was schlägst du Hello World denn als andere Sprache vor, mit der man ('relativ') Speichergering Programmieren kann?
C++ hat zwar viele Schwächen von C übernommen, aber für die meisten zweifelhaften Konstrukte gibt es bessere Alternativen. Aber auch in Object Pascal oder Ada kann man klein und schnell programmieren.