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

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

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;
}
相关推荐
代码游侠12 小时前
学习笔记——时钟系统与定时器
arm开发·笔记·单片机·嵌入式硬件·学习·架构
CQ_YM12 小时前
ARM--SDK、led、beep与链接脚本
c语言·arm开发·嵌入式硬件·嵌入式
xiaobobo333012 小时前
EIDE的最新版本已经默认只支持debug调试STM32单片机了
stm32·单片机·debug·eide
small_planet12 小时前
通过mqtt使用webhook转发消息实现远程查看单片机日志
单片机·运维开发
傻乐u兔14 小时前
C语音初阶————调试实用技巧2
c语言·开发语言
Porco.w14 小时前
STM32之ESP8266
stm32·单片机·嵌入式硬件
jkyy201415 小时前
健康监测驾驶系统赋能:解锁新能源汽车健康出行新场景
大数据·人工智能·物联网·健康医疗
蓝桥_吹雪16 小时前
HAL库深入了解--STM32与GPIO
单片机·嵌入式硬件
嗯嗯=16 小时前
STM32单片机学习篇5
stm32·单片机·学习
不能跑的代码不是好代码16 小时前
STM32:LED共阴/共阳连接与GPIO控制逻辑的关系,如何实现电平转换
stm32·单片机·嵌入式硬件