何时(不)使用 equal 创建枚举?

When (not) to use equal to create an enumaration?

我正在使用 编程基础 课程中的以下示例:

enum color = { red, orange, yellow };
enum fruit = { apple, orange, kiwi}; // error: orange is redefined
int kiwi = 42; // error: kiwi is redefined

作者加注:

An enumeration with = will give the identifier the provided value, which remains as start value for the next enumerators.

上面的代码有效吗?我的意思是,我们什么时候应该(不)使用 = 创建枚举?

正在尝试编译:

enum fruit = { apple, orange, kiwi};
main() {}

我收到以下错误:

$ gcc main.c 
main.c:1:12: error: expected identifier or ‘(’ before ‘=’ token
 enum fruit = { apple, orange, kiwi};

如果我删除 = 字符,文件编译正常。

那么,等号的用法是什么?

行,

enum color = { red, orange, yellow };

是 C 中的语法错误(也在 C++ 中)。一般来说,如果编译器抱怨语法错误,它实际上总是正确的(确保使用正确的方言;例如,-std=c99 -pedantic 用于 C99 和 gcc)。

这句话是在谈论等号 = 的不同用法,如

enum color { red, orange = 4, yellow };

其中 red 为 0,orange 为 4,yellow 为 5。

第一个片段中的注释是关于符号的重新定义,这在相同的范围和命名空间中是不允许的(除了少数例外,但即使对于那些它们也必须声明相同的东西)。改正语法错误后,例子和注释都有意义,希望:

enum color { red, orange, yellow };
enum fruit { apple, orange, kiwi }; // error: orange is redefined
int kiwi = 42; // error: kiwi is redefined