2011-04-06 17 views
18
enum protocol { 
    ascii_prot = 3, /* arbitrary value. */ 
    binary_prot, 
    negotiating_prot = 4 /* Discovering the protocol */ 
}; 

¿Ambos binary_prot y negotiating_prot son iguales a 4?¿Es legal tener valores enum duplicados en C?

+2

Está ** explícitamente permitido ** por el [borrador N1265 C99] (http: // www) .open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) en 6.7.2.2/3 "Especificadores de enumeración": "El uso de enumeradores con' = 'puede producir constantes de enumeración con valores que duplican otras valores en la misma enumeración ". Había puesto esto en una respuesta pero http://stackoverflow.com/users/100297 lo eliminó debido a una respuesta duplicada: http://stackoverflow.com/a/30916409/895245 No creo que esas preguntas sean duplicadas. –

Respuesta

36

Sí.

+0

+1 por ser inteligente;) – Mehrdad

+0

+1 breve pero correcto. –

6

Sí; C no es particular acerca de los valores enum. La razón por la que podría hacer eso es otra cuestión, a menos que haya alguna razón para tratar el paquete de descubrimiento de la misma manera que los paquetes de datos. (Que bien podría ser cuando alguien más diseñó el protocolo y desea adherirse lo más posible a su documentación.)

Cuestiones relacionadas