В обсуждении коллега сказал мне, что он никогда не использует enum
, потому что он испытал, что некоторые C-компиляторы не справляются с оператором enum
правильно.
Он не мог вспомнить, у какого именно компилятора были проблемы, но среди проблем были ошибки при выполнении чего-то вроде
enum my_enum{
my_enum_first = 5;
my_enum_second = 10;
};
т.е. инициализация значений перечисления вместо того, чтобы позволить компилятору делать автоматическое присваивание. Еще один из них заключался в том, что компилятор сам решает, насколько велик enum, и поэтому вы можете иметь непредсказуемое поведение для sizeof my_enum
при компиляции кода на различных платформах.
Чтобы обойти это, он сказал мне, чтобы лучше использовать #define
s для определения постоянных элементов. Но особенно для использования doxygen очень удобно иметь enum (например, в качестве параметра функции), потому что в сгенерированной документации вы можете просто нажать на my_enum
и сразу перейти к описанию my_enum
.
Другим примером может служить завершение кода, когда ваша IDE сообщает вам, что вы можете указать в качестве допустимых параметров для функций. Я знаю это & ndash; пока вы компилируете код в виде C-кода & ndash; что нет безопасности типов (то есть я мог бы также указать 5
вместо my_enum_first
), поэтому использование enum
кажется более косметическим.
Вопрос: знаете ли вы какие-либо компиляторы, которые имеют ограничения относительно использования enum
?
Редактировать 1:
Что касается среды: мы разрабатываем для различных встроенных платформ, поэтому может также быть компилятором для некоторых неясных микроконтроллеров ...
Редактировать 2:
Он мог сказать мне, что компилятор KEIL C51 не очень хорошо работает с перечислениями. Есть ли опыт работы с текущими версиями компилятора C51 ?