你们的编译器都用哪个C标准啊?!
看了一个开源库的实现,它在实现中使用了bool类型的定义。和我上学的时候老师说的一样,其使用宏定义的方式定义了TRUE和FALSE两个标识符,用做bool类型的判断变量。但阅读C标准发布的历程,其早在1999年发布的C99标准中即已经引入了<stdbool.h>头文件,包含了布尔类型的定义,如bool,true,false等。我产也仅需要在Keil编译器中选择支持C99及以上即可中。为什么开源库仍然还要自定义一遍呢?是观念保守了吗?还是C99标准的bool类型有什么缺陷?开源库使用宏定义 TRUE 和 FALSE 而非 C99 的 <stdbool.h>,主要是为了兼容性、减少依赖或历史习惯。在嵌入式开发中,部分老旧编译器(如早期 Keil 版本)可能不支持 C99,或项目需兼容非标准工具链。宏定义不依赖标准库,适合资源受限场景或需严格控制布尔值表示的情况。C99 的 bool 类型(基于 _Bool)无明显缺陷,但在某些编译器中可能有实现差异,或占用固定 1 字节内存,影响优化。习惯性使用宏定义也可能是团队编码规范或遗留代码的延续。
自定义布尔类型是嵌入式开发中常见的工程选择,非观念保守。如果项目使用现代 Keil(支持 C99),推荐用 <stdbool.h> 以提高可读性和标准化;若需兼容老旧环境或优化内存,则宏定义更合适。 我们使用C99,但很少使用bool类型做为判断变量。 可能是出于对旧编译器的兼容性考虑,有些项目可能还在使用较老的编译器,不支持C99标准。
默认标准:C99 完整支持C99 我们使用C99,但也没有使用stdbool.h的头文件 支持的C标准:C89、C99 GCC for ARM 主流选择:C99 C99引入了很多非常实用的特性 ARM Compiler (armcc)
页:
[1]