[APM32E0] 你们的编译器都用哪个C标准啊?!

[复制链接]
80|2
涡流远见者 发表于 2025-10-24 13:28 | 显示全部楼层 |阅读模式
看了一个开源库的实现,它在实现中使用了bool类型的定义。和我上学的时候老师说的一样,其使用宏定义的方式定义了TRUE和FALSE两个标识符,用做bool类型的判断变量。
但阅读C标准发布的历程,其早在1999年发布的C99标准中即已经引入了<stdbool.h>头文件,包含了布尔类型的定义,如bool,true,false等。我产也仅需要在Keil编译器中选择支持C99及以上即可中。为什么开源库仍然还要自定义一遍呢?
Keil编译器C标准参数设置.png
是观念保守了吗?还是C99标准的bool类型有什么缺陷?

DKENNY 发表于 2025-10-24 15:09 | 显示全部楼层
开源库使用宏定义 TRUE 和 FALSE 而非 C99 的 <stdbool.h>,主要是为了兼容性、减少依赖或历史习惯。在嵌入式开发中,部分老旧编译器(如早期 Keil 版本)可能不支持 C99,或项目需兼容非标准工具链。宏定义不依赖标准库,适合资源受限场景或需严格控制布尔值表示的情况。C99 的 bool 类型(基于 _Bool)无明显缺陷,但在某些编译器中可能有实现差异,或占用固定 1 字节内存,影响优化。习惯性使用宏定义也可能是团队编码规范或遗留代码的延续。

自定义布尔类型是嵌入式开发中常见的工程选择,非观念保守。如果项目使用现代 Keil(支持 C99),推荐用 <stdbool.h> 以提高可读性和标准化;若需兼容老旧环境或优化内存,则宏定义更合适。
星云避风港 发表于 2025-10-24 20:47 | 显示全部楼层
我们使用C99,但很少使用bool类型做为判断变量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部