Этот вопрос был до смерти, и я согласен с тем, что перечисления - это путь. Тем не менее, мне любопытно, как перечисления перечисляются в окончательном коде - #defines - это просто замены строк, но перечисляют ли перечисления что-либо в скомпилированный двоичный файл? Или они оба эквивалентны на этом этапе. При написании прошивки и памяти очень ограничено, есть ли какое-либо преимущество, независимо от того, насколько мало, использовать #defines?#define vs enum во встроенной среде (как они скомпилируются?)
Спасибо!
EDIT: В соответствии с комментарием ниже, встроенным я имею в виду цифровую камеру.
Спасибо за ответы! Я все перечислил!
«Встроенный» может означать что угодно: от Nexus S до системы авионики. Вы должны сузить его (какой чип, какой компилятор, какая версия?), Если вы хотите иметь конструктивный ответ. Я согласен с тем, что ответчики должны * относиться к «const». –
@Matthew: Думаю, вы думаете о C++. В C '# define' и' enum' могут создавать константные выражения, но переменная 'const' никогда не является постоянным выражением, и доступ к ней почти наверняка повлечет за собой реальные размеры кода и штрафы за производительность (загрузка из памяти). –
@R, вы правы в том, что 'const' не является выражением const в C99 (и мне нужно прочитать об этом). Но в простых случаях компилятор все же может избежать выделения памяти для них. Например, если я помещаю 'const int a = 1;' в заголовок, тогда 'int b = a;' в main, компилятор * может * быть достаточно умным, чтобы не выделять память для 'a'. –