|
在嵌入式软件开发中,enum变量的作用非常明显。在中文翻译中,程序员号编程书多翻译为“枚举变量”,多用来定义声明真值有限,且确定含义的一组集合的变量。由于是真值有限,并且需要自己定义。在我过往的程序设计中enum变量在声明定义时,多数没有超过20个。所以,我一直以为enum变量只占用1个字节。那事实是这样的吗?来,做个实验验证一下! 我们设计一个LED灯的枚举量定义: typedef enum {
led_action_off = 0,
led_action_on,
led_action_blink,
led_action_fastblink,
led_action_breath,
}led_action_e;再声明一个变量led0,即: led_action_e led0;我们可以看到打印出来的数值为1,代表enum类型的led_action_e的占用空间大小为1字节。 但这是最终结果吗?我们再来编译,并运行一下。结果居然如下: 这时,可以看到led_action_e的占用空间大小又变成了4字节。两次编译,两次不同的结果。为什么呢? 因为我修改了Keil的编译选项。 在关闭编译器的Short enums/wchar选项之后,enum变量将统一按照int类型来定义,否则,按照enum定义的数值容量来定义。比如enum的值大于255了,则其将自动扩展为2字节,以此类推。 enum类型在嵌入式软件开发中的作用非常强大,定义enum类型的变量不仅可以实现数值的比较,状态值的定义,而且在代码阅读上面更提供了便利。虽然,在编译器看来,其就是一个整数类型而已。
|