“stdbool.h”在嵌入式系统中的用法

Gei*_*rer 4 c embedded stdbool

我正在阅读有关嵌入式系统的 C 编码风格,并发现以下声明:

不要使用 stdbool.h 库。分别使用 1 或 0 表示 true 或 false

该声明是在以下来源中编写的: https ://github.com/MaJerle/c-code-style

然而,没有解释为什么使用它或采用这种风格的优点/缺点。

我想知道使用 1 或 0 代替 true 或 false 是否有任何优势。

use*_*733 6

我想知道使用 1 或 0 代替 true 或 false 是否有任何优势。

没有。stdbool.h在嵌入式系统中使用是可以的。

请注意,这stdbool.h可能在较旧的编译器上不可用,但这不可能是原因,因为指南还链接了推荐的stdint.h类型(这本身就是一个很好的建议)。此外,您不应该使用过时的编译器。


Lun*_*din 5

具体可以说的是stdbool.h

\n
    \n
  • 它是所有C 编译器(包括独立实现(嵌入式编译器))都需要支持的强制标头之一。来源:ISO 9899:2018 第 4 章 \xc2\xa76。
  • \n
  • 早已过时的 C90(“ANSI C”)不支持它。1因此,不使用标头并求助于/ 的主要原因0是与 C90 的向后兼容性。
  • \n
  • 即将推出的 C23 使得stdbool.h不必要(但尚未正式弃用),因为在 C23 中bool, ,truefalse最终成为正确的关键字。_Bool仍然可用。
  • \n
\n
\n

编码风格也有以下规则:

\n
    \n
  • \n
    \n

    不允许以 // 开头的注释。

    \n
    \n

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

    \n
  • \n
  • \n
    \n

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

    \n
    \n

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

    \n
  • \n
\n

所以我得出的结论是,添加了很多这些规则是为了兼容 C90,否则它们就没有意义。

\n