Diese Frage wurde zu Tode getan, und ich würde zustimmen, dass enums der Weg zu gehen sind. Allerdings bin ich neugierig, wie Enums in den endgültigen Code kompilieren - #defines sind nur String-Ersetzungen, aber fügen Enums etwas zu der kompilierten binary hinzu? Oder sind sie in dieser Phase beide gleichwertig? Wenn das Schreiben von Firmware und Arbeitsspeicher sehr begrenzt ist, gibt es einen Vorteil, egal wie klein, die Verwendung von #defines?#define vs enum in einer eingebetteten Umgebung (Wie kompilieren sie?)
Danke!
BEARBEITEN: Wie durch den Kommentar unten, durch eingebettet, ich meine eine Digitalkamera.
Danke für die Antworten! Ich bin alles für Enums!
"Embedded" kann alles von einem Nexus S bis zu einem Avioniksystem bedeuten. Sie sollten es eingrenzen (welcher Chip, welcher Compiler, welche Version?), Wenn Sie eine sinnvolle Antwort wünschen. Ich stimme den Beantwortern zu, die * ähnlich * behandelt werden sollten. –
@Matthew: Ich denke du denkst an C++. In C können 'define' und' enum' konstante Ausdrücke erzeugen, aber eine 'const'-Variable ist niemals ein konstanter Ausdruck und der Zugriff darauf wird fast sicher eine echte Code-Größe und Leistungseinbußen zur Folge haben (Laden aus dem Speicher). –
@R, Sie haben recht, wenn ein 'const' in C99 kein const-Ausdruck ist (und ich muss das hier nachlesen). In einfachen Fällen kann der Compiler jedoch immer noch die Zuweisung von Speicher für sie vermeiden. Zum Beispiel, wenn ich in einem Header 'const int a = 1;' setze, dann ist 'int b = a; 'in main, der Compiler * kann schlau genug sein, Speicher für' a 'nicht zu reservieren. –