什么时候(不)使用等于创建枚举?

时间:2015-01-25 12:47:00

标签: c enums

我从编程基础课程中学习以下示例:

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

作者补充说明:

  

使用=的枚举将为标识符提供所提供的值,该值仍作为下一个枚举数的起始值。

以上代码有效吗?我的意思是,我们何时应该(不)使用=来创建枚举?

尝试编译:

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

我收到以下错误:

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

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

那么,相同字符的使用是什么?

1 个答案:

答案 0 :(得分:2)

这一行,

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