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

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

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;
}
相关推荐
学逆向的7 小时前
C 枚举变量
c语言·开发语言·网络安全
糖糖单片机设计7 小时前
基于 STM32 的植物生长环境监控系统
stm32·单片机·嵌入式硬件
冷凝雨7 小时前
前导零、后导零、最高有效位、最低有效位计算(C)
c语言
创界工坊工作室7 小时前
56-基于STC89C52的智能声控饮水机设计
stm32·单片机·嵌入式硬件·51单片机·proteus
LCG米7 小时前
STM32 DMA 多通道链式传输实测:请求仲裁顺序错位根因、半满中断乒乓与高速并发搬运落地
stm32·单片机·嵌入式·1024程序员节
鸥梨菌Honevid7 小时前
C 语言 restrict 关键字深度解析:从“独占访问”承诺到编译器激进优化
c语言
hkj88088 小时前
stm32 ADC DMA 循环模式配合双缓冲分块(Ping-Pong)
stm32·单片机·嵌入式硬件
RFID科技的魅力11 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
青衫嵌入式11 小时前
用 STM32 搞清楚 FreeRTOS 的任务上下文到底是什么
物联网·程序员
水饺编程12 小时前
第2章:Linux 基础,切换用户
linux·c语言·汇编