#define против enum во встроенной среде (как они компилируются?) - PullRequest
6 голосов
/ 09 января 2011

Этот вопрос был задуман до смерти, и я бы согласился, что перечисления - это путь.Тем не менее, мне любопытно, как перечисления скомпилируются в конечном коде - #defines являются просто заменами строк, но добавляют ли перечисления что-нибудь к скомпилированному двоичному файлу?Или они оба эквивалентны на этом этапе.Когда запись прошивки и памяти очень ограничена, есть ли какое-либо преимущество, независимо от того, насколько оно мало, с использованием #defines?

Спасибо!

РЕДАКТИРОВАТЬ: в соответствии с комментарием ниже, встроенным,Я имею в виду цифровую камеру.

Спасибо за ответы!Я все для перечислений!

Ответы [ 3 ]

10 голосов
/ 09 января 2011

Оба являются константными выражениями в терминологии стандарта, поэтому они "должны" быть полностью оценены во время компиляции любым нормальным компилятором. Для создания другого кода потребуется вредоносный патологический компилятор.

5 голосов
/ 09 января 2011

enum - это, в конечном счете, просто целое число.Компилятор распространяет значения, как это было бы для const.

4 голосов
/ 09 января 2011

Невозможно сказать без профилирования или измерения каким-либо другим способом.

НО, любой приличный компилятор не покажет существенной разницы.Кроме того, вы всегда должны отдавать предпочтение читабельному, безопасному с точки зрения типов коду, а не эффективному, нечитаемому, понятному коду.Не начинайте оптимизацию для повышения эффективности по сравнению с удобочитаемостью, пока не доказали две вещи:

  1. вам действительно нужно повышение эффективности
  2. часть программы, которую вы изменяете, была показанабыть узким местом профилировщиком.
...