硬汉嵌入式论坛

 找回密码
 立即注册
查看: 690|回复: 7
收起左侧

【求助】选择编译问题,宏定义和枚举的区别

[复制链接]

8

主题

14

回帖

38

积分

新手上路

积分
38
发表于 2023-5-10 16:56:16 | 显示全部楼层 |阅读模式
使用keil学习开发GD32过程中,使用选择编译(条件编译)来一键开启或关闭调试信息,但是有以下问题

使用宏定义可以正确选择编译
宏定义.png
如果使用枚举类型则无法正确判断,但是对应的值都是对的
枚举.png
枚举 串口.png
这是为什么呀,我需要补充哪方面的知识呢?
注:忽略图中printf函数的位置,为了展示问题挪上来的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
发表于 2023-5-11 12:35:30 | 显示全部楼层
AC5和AC6测试了下,确实不行。
回复

使用道具 举报

0

主题

97

回帖

97

积分

初级会员

积分
97
发表于 2023-5-11 14:02:53 | 显示全部楼层
枚举是在编译时才生效。条件编译判断发生在预编译阶段,所以第二段#define DEBUG_PRINTF ON等价于#define DEBUG_PRINTF,所以你把enum那句去掉也能编译通过,结果也是一样。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106590
QQ
发表于 2023-5-11 14:55:15 | 显示全部楼层
ilcvm 发表于 2023-5-11 14:02
枚举是在编译时才生效。条件编译判断发生在预编译阶段,所以第二段#define DEBUG_PRINTF ON等价于#define D ...





只是这样的话,第2段#if要改成#ifdef了


回复

使用道具 举报

39

主题

928

回帖

1050

积分

至尊会员

积分
1050
发表于 2023-5-11 15:17:54 | 显示全部楼层
本帖最后由 ghslfgkkl88 于 2023-5-11 15:19 编辑

1. 宏定义的那个,是条件编译,发生在编译阶段。
2. 枚举是数据类型,只能在程序的执行阶段才能判断。
回复

使用道具 举报

8

主题

14

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2023-5-11 22:13:28 | 显示全部楼层
ilcvm 发表于 2023-5-11 14:02
枚举是在编译时才生效。条件编译判断发生在预编译阶段,所以第二段#define DEBUG_PRINTF ON等价于#define D ...

谢谢大佬讲解
回复

使用道具 举报

8

主题

14

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2023-5-11 22:14:20 | 显示全部楼层
ghslfgkkl88 发表于 2023-5-11 15:17
1. 宏定义的那个,是条件编译,发生在编译阶段。
2. 枚举是数据类型,只能在程序的执行阶段才能判断。

谢谢大佬讲解
回复

使用道具 举报

39

主题

928

回帖

1050

积分

至尊会员

积分
1050
发表于 2023-5-12 11:06:24 | 显示全部楼层

啊,不好意思,3楼的说法是严谨的,一个是预编译阶段,一个是编译阶段。我说错了,误人子弟了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-25 19:53 , Processed in 0.244655 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表