涡流远见者 发表于 2025-10-24 13:28

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

看了一个开源库的实现,它在实现中使用了bool类型的定义。和我上学的时候老师说的一样,其使用宏定义的方式定义了TRUE和FALSE两个标识符,用做bool类型的判断变量。但阅读C标准发布的历程,其早在1999年发布的C99标准中即已经引入了<stdbool.h>头文件,包含了布尔类型的定义,如bool,true,false等。我产也仅需要在Keil编译器中选择支持C99及以上即可中。为什么开源库仍然还要自定义一遍呢?是观念保守了吗?还是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类型做为判断变量。

魔法森林精灵 发表于 2025-11-5 22:55

可能是出于对旧编译器的兼容性考虑,有些项目可能还在使用较老的编译器,不支持C99标准。

lihuami 发表于 2025-11-5 10:30

默认标准:C99            

maudlu 发表于 2025-11-5 15:35

完整支持C99            

天体书记 发表于 2025-11-7 17:33

我们使用C99,但也没有使用stdbool.h的头文件

minzisc 发表于 2025-11-8 11:34

支持的C标准:C89、C99            

pentruman 发表于 2025-11-9 13:17

GCC for ARM            

gygp 发表于 2025-11-9 19:33

主流选择:C99            

plsbackup 发表于 2025-11-11 14:39

C99引入了很多非常实用的特性            

janewood 发表于 2025-11-12 13:31

ARM Compiler (armcc)
页: [1]
查看完整版本: 你们的编译器都用哪个C标准啊?!