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

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

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

    
задан gdb 06.04.2011 в 05:30
источник
  • Это явно разрешено проектом N1265 C99 в разделе 6.7.2.2/3 «Спецификаторы перечисления»: «Использование счетчиков с = может создавать константы перечисления со значениями, которые дублируют другие значения в том же перечислении». Я поставил это в ответ, но stackoverflow.com/users/100297 удалил его из-за дублирования ответа: stackoverflow.com/a/30916409/895245 Я не думаю, что эти вопросы дублируются. –  Ciro Santilli 新疆改造中心 六四事件 法轮功 18.06.2015 в 19:25

2 ответа

36

Да.     

ответ дан James McNellis 06.04.2011 в 05:33
источник
  • +1 за умение;) –  Mehrdad 06.04.2011 в 05:34
  • +1 краткий, но правильный. –  Johan Bezem 14.12.2011 в 22:36
6

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

    
ответ дан geekosaur 06.04.2011 в 05:36
источник