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

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

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;
}
相关推荐
郭尘帅66629 分钟前
IDEA中删除多余的jdk选项 【IDEA2024版】
java·ide·intellij-idea
慌糖30 分钟前
IDEA报错“资源找不到”?重启就好了!!?
java·ide·intellij-idea
荔枝吻31 分钟前
【保姆级喂饭教程】idea开发TODO规范
java·ide·intellij-idea
荔枝吻32 分钟前
【保姆级喂饭教程】Idea中配置类注释模板
java·ide·intellij-idea
LucianaiB1 小时前
时序数据库选型指南︰为什么IoTDB成为物联网场景首选?
数据库·物联网·百度·时序数据库·iotdb
basketball6161 小时前
Linux C 进程基本操作
linux·运维·服务器·c语言·后端
Marst Code2 小时前
PyCharm(入门篇)
ide·python·pycharm
草莓熊Lotso2 小时前
【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
c语言·数据结构·其他·刷题
平哥努力学习ing2 小时前
C语言内存函数
c语言·开发语言·算法