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

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

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;
}
相关推荐
AI thought2 小时前
【转】C语言中 -> 是什么意思?
c语言·位移运算符·右移赋值·无符号整数·算术右移
普中科技3 小时前
【普中STM32F1xx开发攻略--标准库版】-- 第 45 章 FSMC-外扩 SRAM 实验
stm32·单片机·嵌入式硬件·fsmc·普中科技·外扩sram·is62wv51216
qeen874 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
sinat_255487815 小时前
第七部分。介绍MVC(模型-视图-控制器)模式
java·ide·http·tomcat·intellij-idea
三佛科技-187366133976 小时前
FT32F103C8AT7兼容GD32F103C8T632 位通用微控制器MCU,替代性分析
单片机·嵌入式硬件
朴马丁6 小时前
构建日化数字创新平台:PLM如何融合AI、物联网数据,驱动智能研发与精准营销
人工智能·物联网·流程行业plm·日化行业
iCxhust6 小时前
8086汇编 word ptr
汇编·单片机·嵌入式硬件·微机原理·8088单板机
嵌入式ZYXC6 小时前
第3篇:《面试题:I2C为什么要加上拉电阻?阻值怎么选?》
stm32·单片机·嵌入式硬件·面试·职场和发展
leo__5206 小时前
C# 虚拟键盘(软键盘)实现
单片机·c#·计算机外设
你疯了抱抱我7 小时前
【STM32】使用 STM32CubeMX 生成项目,LED测试;上位机:STM32F411CEU6
stm32·单片机·嵌入式硬件