2011-03-12 17 views
7

Tengo dos enumeraciones.¿Es válido emitir un `enum` a otro` enum` en [C]?

enum A { A1=1, A2=2 } 

enum B { B1=1, B2=2 } 

¿Es esto válido por el estándar de C?

A a = A1; 
B b = a; 

(compilado bien con Clang, pero no puedo seguro de que esto es estándar o el comportamiento de extensión)

Respuesta

6

Es válida por la norma, pero la especificación C99 menciona que algunas implementaciones pueden generar una advertencia:

Una implementación puede generar advertencias en muchas situaciones, ninguna de las cuales se especifican como parte de esta norma internacional. Las siguientes son algunas de las situaciones más comunes.

  • se da un valor a un objeto de un tipo enumerado que no sea por la asignación de una constante de enumeración que es un miembro de ese tipo, o una variable de enumeración que tiene el mismo tipo, o el valor de una función que devuelve el mismo tipo enumerado (6.7.2.2).
0

Creo que en C enumeraciones son básicamente int s con personalidad. (Esto contrasta con C++, donde son tipos de pleno derecho.) Por lo tanto, la asignación de diferentes enum s todavía está trabajando con int s, por lo que es legal. Sin embargo, no estoy diciendo que esto se recomienda :)

0

Es válido el estándar C pero es una mala idea. Tenga en cuenta que es no C++ válido.

0

Las funciones de idioma válidas están destinadas a ayudar al desarrollador. Si no especifica valores de elementos enum sus valores se generan automáticamente. From another language.