Является ли законным иметь повторяющиеся значения перечисления в C?

enum protocol {
    ascii_prot = 3, /* arbitrary value. */
    binary_prot,
    negotiating_prot = 4 /* Discovering the protocol */
};

Оба binary_prot и negotiating_prot равны 4?

Ответ 1

Да.

Ответ 2

Да; C не относится к значениям перечисления. Почему вы можете это сделать, это еще один вопрос, если нет причин рассматривать пакет обнаружения так же, как пакеты данных. (Что вполне может быть, когда кто-то другой разработал протокол, и вы хотите как можно ближе придерживаться их документации.)