假设有如下代码需要兼容三个版本
这样无法完成任务的
无论
typedef enum{
FIRST,
SECOND,
THIRD,
};
#define NUM THIRD
#if (NUM == FIRST)
#define VAR 1
#elif(NUM == SECOND)
#define VAR 2
#elif(NUM == THIRD)
#define VAR 3
#endif
int main(void)
{
#if (NUM == FIRST)
printf("VAL = %d\n",VAR);
#elif(NUM == SECOND)
printf("VAL = %d\n",VAR);
#elif(NUM == THIRD)
printf("VAL = %d\n",VAR);
#endif
}
#define NUM FIRST还是
#define NUM SECOND还是
#define NUM THIRD
运行结果都一样
但是这样就可以完成任务了
#define FIRST 1
#define SECOND 2
#define THIRD 3
#define NUM THIRD
#if (NUM == FIRST)
#define VAR 1
#elif(NUM == SECOND)
#define VAR 2
#elif(NUM == THIRD)
#define VAR 3
#endif
int main(void)
{
#if (NUM == FIRST)
printf("VAL = %d\n",VAR);
#elif(NUM == SECOND)
printf("VAL = %d\n",VAR);
#elif(NUM == THIRD)
printf("VAL = %d\n",VAR);
#endif
}
#define NUM FIRST还是
#define NUM SECOND还是
#define NUM THIRD
都可以得到想要的结果
为什么呢?????
通过 分析发现当使用枚举的方法时:
NUM FIRST SECOND THIRD都 #define为空,所以无论怎么
#define NUM
三者是相等的
查阅相关资料,最终在《UINX 高级编程环境》 第3版,P219页中 “在 Linux 中 ACORE 和 AXSIG 会计相标志,被定义为 enum 类型,而在 #ifdef 表达式中不能使用 eunm 类型值”可知原因。