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

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

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;
}
相关推荐
AndreasEmil4 小时前
JavaSE - 继承
java·开发语言·ide·vscode·intellij-idea·idea
Gomiko10 小时前
C/C++基础(五):分支
c语言·c++
TangDuoduo000511 小时前
【STM32 GPIO控制器原理】
stm32·单片机·嵌入式硬件
盈创力和200711 小时前
当抱杆箱也上云:如何用 LoRa/NB-IoT 打造一个会“告警”的智能户外电气箱?
网络·物联网
Yeats_Liao11 小时前
CANN Samples(十三):Ascend C 算子开发入门
c语言·开发语言
银迢迢11 小时前
idea控制台中文乱码采用好几种方法一直解决不了
java·ide·intellij-idea
@good_good_study12 小时前
STM32 直流有刷电机控制(野火电机控制学习笔记)
stm32·单片机
好好沉淀13 小时前
IDEA 取消 Save Actions 自动删除未用导入(前端开发避坑)
java·ide·intellij-idea
jkyy201414 小时前
端到端生态闭环:智能硬件+云平台+应用终端,最大化穿戴设备价值
大数据·人工智能·物联网·健康医疗
添加shujuqudong1如果未回复14 小时前
深度探索:自动驾驶路径规划与避障功能实现——从运动学到动力学模型到决策规划算法的完整系列
ide