假设有如下代码需要兼容三个版本
这样无法完成任务的
无论
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 类型值”可知原因。

本文探讨了在不同版本间实现代码兼容性的挑战,并深入分析了使用枚举类型与宏定义的区别及原因。通过实例展示了如何通过宏定义解决代码兼容性问题,以及在Linux环境下ACORE和AXSIG标志的特性。
1232

被折叠的 条评论
为什么被折叠?



