您的位置:首页 > 其它

#if #elif #define typedef 使用时的注意事项

2015-04-23 23:41 363 查看
假设有如下代码需要兼容三个版本

这样无法完成任务的

无论

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 类型值”可知原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: