微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;

typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;

时间:10-02 整理:3721RD 点击:
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;学C语言的时候记得说枚举里面元素不能被赋值,以上是我在STM32库里面看到,为什么他们的枚举元素可以赋值?

其实,简单的说‘枚举类型的元素不能被赋值’不准确;
枚举类型应该把它看成是一组常数的集合,每一个枚举类型的数据占据一个单元的存储空间,只能用这个常数集合的成员给这个枚举类型数据赋值;
我之所以说‘枚举类型的元素不能被赋值’这句话不准确,是因为有这句话的地方,基本都没有准确说明枚举类型的属性,也许是因为有花括号和逗号出现在成员列表的表达上,所以怕大家会把 enum 后面的花括号内容理解成数组初始化? 所以赶紧告诉大家:枚举类型的成员是不允许赋值的,但是这会给大家带来一个误解:枚举类型是一个不能修改的数组?!#¥#……¥
枚举类型的定义在花括号里面列出常数成员,如果没有指定常数值,就默认从0开始依次加1指定每个成员的具体值,此时使用枚举类型可以就把它作为一组有含义的符号,具体怎么实现,那就是编译器的事了;
如果要给某一个成员指定具体的值,可以在声明成员时使用等号赋值给具体的成员,然后后面没有指定值的成员又依次加1,直到再次遇到指定值的语句;
所以、枚举类型的成员是常数,‘枚举类型的元素不能被赋值’就是说‘常数不能被赋值’,只是这句话没有将原因说明,这样解释应该清楚了吧?
你看到的例子只是在指定常数的值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top