У меня есть два перечисления.
enum A { A1=1, A2=2 } enum B { B1=1, B2=2 }
Это допустимо по стандарту C?
A a = A1; B b = a;
(скомпилировано с Clang, но я не уверен, что это стандарт илиповедение расширения)
Стандарт действителен, но в спецификации C99 говорится, что некоторые реализации могут генерировать предупреждение:
Реализация может генерировать предупреждения во многих ситуациях, ни одна из которых не указана как часть этого международного стандарта.Стандарт.Ниже приведены некоторые из наиболее распространенных ситуаций: Значение присваивается объекту перечисляемого типа, кроме как путем присвоения константы перечисления, являющейся членом этого типа, или перечисленияпеременная того же типа или значение функции, которая возвращает тот же перечислимый тип (6.7.2.2).
Реализация может генерировать предупреждения во многих ситуациях, ни одна из которых не указана как часть этого международного стандарта.Стандарт.Ниже приведены некоторые из наиболее распространенных ситуаций:
valid - перечисления - это языковые функции, предназначенные для помощи разработчику.Если вы не укажете значения элементов перечисления, их значения будут сгенерированы автоматически. с другого языка .
Это действительный стандарт С, но это плохая идея. Обратите внимание, что это не допустимый C ++.
Я считаю, что в C перечисления в основном int с личностью.(Это отличается от C ++, где они являются полноценными типами.) Таким образом, присвоение различных enum s фактически все еще просто работает с int s, поэтому это законно.Однако я не говорю, что это рекомендуется:)
int
enum