不能使用枚举作为 宏定义的定义

在开发过程中遇到个很奇怪的问题。直接上代码

cs 复制代码
#include <stdio.h>

enum Mode
{
    A = 0,
    B = 1,
};

#define MODE B

int main()
{
#if A == MODE
	printf("A\r\n");
#elif B == MODE
	printf("B\r\n");
#endif
				
   return 0;
}

在这里我期待的是得到

cs 复制代码
B

但是实际上输出是

cs 复制代码
A

这里#if #elif #endif 条件编译执行的结果不正确。

这是因为宏定义是预编译阶段 ,而枚举是编译阶段。宏定义的预编译早于枚举的编译。所以不能使用枚举给宏定义定义。

修改成下面代码即可

cs 复制代码
#include <stdio.h>

#define A 0
#define B 1

#define MODE B

int main()
{
#if A == MODE
	printf("A\r\n");
#elif B == MODE
	printf("B\r\n");
#endif
				
   return 0;
}
相关推荐
酷飞飞3 小时前
库函数版独立按键用位运算方式实现(STC8)
单片机·嵌入式硬件
我怕是好3 小时前
STM32 输入捕获,串口打印,定时器,中断综合运用
stm32·单片机·嵌入式硬件
JosieBook3 小时前
【IDEA】IntelliJ IDEA 中文官方文档全面介绍与总结
java·ide·intellij-idea
芯希望5 小时前
芯伯乐XBL6019 60V/5A DC-DC升压芯片的优质选择
大数据·人工智能·物联网·dc-dc·电子元器件·电源管理ic·xblw芯伯乐
电子科技圈5 小时前
芯科科技成为全球首家通过PSA 4级认证的物联网芯片厂商巩固其在物联网安全领域的领导地位
科技·物联网·安全·网络安全·边缘计算
时空自由民.5 小时前
rk3588s vscode索引失败的问题
ide·vscode·编辑器
zhmc6 小时前
MCU程序的ARM-GCC编译链接
arm开发·单片机·嵌入式硬件
点灯小铭7 小时前
基于STM32单片机的OneNet物联网环境检测系统
stm32·单片机·物联网·毕业设计·课程设计
K神7 小时前
物联网之常见网络配置
物联网·网络协议·go
草莓熊Lotso8 小时前
【洛谷题单】--分支结构(二)
c语言·c++·经验分享·其他·刷题