To pytanie zostało zrobione na śmierć i zgodziłbym się, że wyliczenia są drogą do zrobienia. Jednak jestem ciekawy, w jaki sposób enumy kompilują się w ostatecznym kodzie - #definy są po prostu zamianą ciągów, ale czy enumy dodają coś do skompilowanego pliku binarnego? A może oba są równoważne na tym etapie? Kiedy pisanie oprogramowania układowego i pamięci jest bardzo ograniczone, czy jest jakaś korzyść, nieważne jak mała, do używania #defines?#define vs enum w środowisku osadzonym (w jaki sposób się kompilują?)
Dzięki!
EDYCJA: Zgodnie z prośbą o komentarz poniżej, przez osadzone, mam na myśli aparat cyfrowy.
Dzięki za odpowiedzi! Jestem za wyliczeniem!
"Wbudowany" może oznaczać wszystko, od Nexusa S do systemu awioniki. Powinieneś go zawęzić (który układ, który kompilator, która wersja?), Jeśli chcesz uzyskać sensowną odpowiedź. Zgadzam się z odpowiedziami, które * powinno * być traktowane podobnie do "const". –
@Matthew: Myślę, że myślisz o C++. W języku C '# define' i' enum' mogą tworzyć wyrażenia stałe, ale zmienna 'const' nigdy nie jest wyrażeniem stałym, a uzyskanie dostępu do niej prawie na pewno spowoduje wystąpienie rzeczywistego rozmiaru kodu i kar za wydajność (ładowanie go z pamięci). –
@R, masz rację co do 'const' nie będącego wyrażeniem const w C99 (i muszę to przeczytać). Ale w prostych przypadkach kompilator nadal może unikać przydzielania pamięci. Na przykład, jeśli wstawię 'const int a = 1;' w nagłówku, to 'int b = a;' w main, kompilator * może * być wystarczająco inteligentny, aby nie przydzielić pamięci dla 'a'. –