我正在阅读有关嵌入式系统的C代码风格的文章,我找到了以下声明:

不要使用stdbool.h库.用1或0表示真或假 分别

这份声明的来源如下: https://github.com/MaJerle/c-code-style

然而,没有解释为什么要使用它,也没有解释采用这种风格有什么好处/坏处.

我想知道使用1或0而不是True或False有什么好处.

推荐答案

关于stdbool.h人,具体可以说些什么:

  • 它是all个C编译器(包括独立实现(嵌入式编译器))必须支持的强制性标头之一.资料来源:ISO 9899:2018第四章第六节.
  • 它不受早已过时的C90("ANSI C")支持.因此,不使用标头并求助于1/0的主要原因是向后兼容C90.
  • 即将到来的C23使stdbool.h变得不必要(但尚未正式弃用),因为在C23中,booltruefalse最终成为合适的关键字._Bool也仍然可用.

此外,编码样式具有以下规则:

  • 不允许使用以//开头的注释.

    这也表明C90兼容性是必需的,因为这是您不允许这样的注释的唯一原因(它们是在C99中引入的).

  • 不要在第一个可执行语句之后声明变量

    同样,这也是C90兼容性所必需的,否则就没有任何意义了.

因此,我可以得出结论,这些规则中有很多是为了C90兼容性而添加的,否则就没有意义了.

C++相关问答推荐

当包含头文件时,gcc会发出隐式函数声明警告

如何避免重新分配指针数组时,我们从一开始就不知道确切的大小

ATmega328P USART发送字符重复打印

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

以下声明和定义之间的区别

`#if`条件中是否允许`sizeof`?

为什么将函数名括在括号中会禁用隐式声明?

如何使解释器存储变量

如何使用C++在控制台中以彩色打印被阻止的客户端

类型定义 struct 与简单的类型定义 struct

GCC错误,共享内存未定义引用?

OSDev--双缓冲重启系统

如何将大写/小写土耳其字母相互转换?

C++中PUTS函数的返回值

STM32 FATFS用户手册(Um1721)中的代码正确吗?

将复合文字数组用作临时字符串缓冲区是否合理?

与指针的原始C数组或C++向量<;向量<;双>>;

在列表中查找素数

保存有符号整数结果的变量是否会溢出(后增量的副作用),并且此后从未在任何表达式中使用过它,是否会导致 UB?

使用 SDL2 的 C 程序中的内存泄漏