当前位置: 技术问答>linux和unix
c语言enum的疑问
来源: 互联网 发布时间:2017-03-14
本文导语: 是否申明为enum的变量不一定取枚举中的值,如 void (*brightness_set)(struct led_classdev *led_cdev, enum led_brightness brightness); 但是 enum led_brightness 的定义只有3个 enum led_brightness { LED_OFF = 0, LED_HAL...
是否申明为enum的变量不一定取枚举中的值,如
void (*brightness_set)(struct led_classdev *led_cdev, enum led_brightness brightness);
但是 enum led_brightness 的定义只有3个
enum led_brightness {
LED_OFF = 0,
LED_HALF = 127,
LED_FULL = 255,
};
原先以为brightness只能取上面的三个值,但实际看好像不是,brightness可以取任意整数,
但如果允许这样的化,有何必声明为 enum led_brightness 呢?
void (*brightness_set)(struct led_classdev *led_cdev, enum led_brightness brightness);
但是 enum led_brightness 的定义只有3个
enum led_brightness {
LED_OFF = 0,
LED_HALF = 127,
LED_FULL = 255,
};
原先以为brightness只能取上面的三个值,但实际看好像不是,brightness可以取任意整数,
但如果允许这样的化,有何必声明为 enum led_brightness 呢?
|
enum 和#define 差不多,只是#define 在编译的时候不做类型检查,而enum做类型检查。enum写的代码别人更容易理解。
|
这个不得不说是一个遗憾吧,对于C来讲,并不会去检查枚举是否是“合法”的,更多的是给程序员看的,不过说实话,意义并不是非常大……
这一点在C++中得到了修正,不知道C99里有没有修正,LZ有兴趣的话,可以自己证实一下……
使用enum实际上是一种比较良好的编程风格,尽量少的使用#define,除非#define是必须的……
这一点在C++中得到了修正,不知道C99里有没有修正,LZ有兴趣的话,可以自己证实一下……
使用enum实际上是一种比较良好的编程风格,尽量少的使用#define,除非#define是必须的……
|
方便人理解代码
|
深入的说,原来C语言也在不断完善