Подтвердить что ты не робот

Размер перечислений в байтах разных компиляторов

- размер перечисления всегда один и тот же среди разных компиляторов (gcc, visual c и другие?). То есть, sizeof() конкретного перечисления дает одинаковые значения каждому компилятору, следующему стандартам C/С++?

4b9b3361

Ответ 1

Нет.

В обоих C и С++ перечисление будет иметь такой размер, что все значения могут быть представлены и совместимы с целым типом. Различные компиляторы могут использовать другой алгоритм для выбора типа (если он не указан другим стандартом, такой четко определенный ABI). (С++ 11 позволяет указать базовый тип с новым синтаксисом)

Ответ 2

"Каждый перечисленный тип должен быть совместим с char, подписанным целочисленный тип или целочисленный тип без знака. Выбор типа определяемые реализацией), но должны быть способны представлять значения всех членов перечисления."

"... Реализация может задержать выбор целого типа пока не будут видны все константы перечисления.

ISO/IEC 9899: 1999 (E) стр .105

Таким образом, мы имеем только верхние границы для sizeof (enum). В большинстве систем у меня был sizeof (enum) = 4, но компилятор STM сделал sizeof (enum) = 1/2/4 в зависимости от значений, записанных в enum

Изменить: кажется, что вы можете установить одно из своих значений enum в max int, чтобы гарантировать, что компилятор выбирает целое число как размер перечисления.