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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设有如下代码需要兼容三个版本


这样无法完成任务的

无论


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 类型值”可知原因。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值