日期:2014-05-16  浏览次数:20720 次

c语言enum的疑问
是否申明为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 呢? 


------解决方案--------------------
方便人理解代码
------解决方案--------------------
enum 和#define 差不多,只是#define 在编译的时候不做类型检查,而enum做类型检查。enum写的代码别人更容易理解。
------解决方案--------------------
这个不得不说是一个遗憾吧,对于C来讲,并不会去检查枚举是否是“合法”的,更多的是给程序员看的,不过说实话,意义并不是非常大……
这一点在C++中得到了修正,不知道C99里有没有修正,LZ有兴趣的话,可以自己证实一下……
使用enum实际上是一种比较良好的编程风格,尽量少的使用#define,除非#define是必须的……
------解决方案--------------------
深入的说,原来C语言也在不断完善