Questa domanda è stata fatta a morte e sono d'accordo che le enumerazioni siano la strada da percorrere. Tuttavia, sono curioso di sapere come enum compili nel codice finale. #defines sono solo sostituzioni di stringhe, ma le enumerazioni aggiungono qualcosa al binario compilato? O sono entrambi equivalenti in quella fase. Quando scrivere firmware e memoria è molto limitato, c'è qualche vantaggio, non importa quanto piccolo, usare i #defines?#define vs enum in un ambiente incorporato (come vengono compilati?)
Grazie!
MODIFICA: Come richiesto dal commento di seguito, per embedded, intendo una fotocamera digitale.
Grazie per le risposte! Sono tutto per enumerare!
"Embedded" può significare qualsiasi cosa, da un Nexus S a un sistema avionico. Dovresti restringerlo (quale chip, quale compilatore, quale versione?) Se vuoi una risposta significativa. Sono d'accordo con i rispondenti che * dovrebbe * essere trattato come un 'const'. –
@Matthew: Penso che stai pensando al C++. In C, '# define' e' enum' possono creare espressioni costanti, ma una variabile 'const' non è mai un'espressione costante, e accedervi quasi certamente incorre in dimensioni del codice reali e penalità prestazionali (caricandola dalla memoria). –
@R, hai ragione su un 'const' non essendo un'espressione const in C99 (e ho bisogno di leggere su questo). Ma in casi semplici, il compilatore può ancora evitare di allocare memoria per loro. Per esempio, se metto 'const int a = 1;' in un'intestazione, quindi 'int b = a;' in main, il compilatore * potrebbe * essere abbastanza intelligente da non allocare memoria per 'a'. –