问题
在和小伙伴调试程序的时候遇见了一个运行bug,跟踪后发现是,枚举元素的值和自己定义的不一样。大概如下代码形式。
#include<stdio.h>
enum{LED_ON,LED_OFF};
#define LED_ON 1
int mean()
{
printf("%d,%d\n",LED_ON,LED_OFF);
return 0;
}
其运行结果是:1,1
从运行结果可知,按照枚举LED_ON=0,输出应该是0,但是事实却为1。细读代码可知,宏定义名字和枚举的名字一样,实际起作用的是宏定义,好像枚举元素中的LED_ON失效了一样。
上述情形在实际项目中往往不是那么明显,往往会是两个部分放在了不同的头文件中,通过包含头文件,间接导致了上述情形。也会有同样的问题。
解决
将宏定义的名字和区分。在编码时,可通过特定的前后缀来区分,例如枚举加前缀E_XXX,宏加前缀M_XXX
原理
这里先不深究了。