在C中有重复的枚举值是否合法?

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

binary_protnegotiating_prot等于4

是。

是; C并不特别关于枚举值。 为什么你可能这样做是另一个问题,除非有一些理由将发现数据包视为与数据包相同。 (当其他人设计协议时,你可能会尽可能地密切关注他们的文档。)