为什么使用<stdbool.h>而不是_Bool?

时间:2017-11-19 06:43:30

标签: c boolean

每当我需要布尔类型时,我被告知创建一个,或者更好,使用stdbool.h

由于stdbool.h使用typedef bool _Bool,是否有理由使用标头而不是使用_Bool类型?它只适用于其他宏(/* #define true 1 #define false 0 */)吗?

3 个答案:

答案 0 :(得分:5)

要添加到语言中的明显类型是bool。但不幸的是,编写了大量代码,其中包括bool的其他形状和形式。回想一下,仅在C99中添加了对布尔类型的支持。

所以C语言委员会别无选择,只能为它提取一个保留的标识符(_Bool)。但是,由于明显的类型名称选择仍然相同,因此添加stdbool.h以允许用户使用明显的名称。这样,如果您的代码没有自制的bool,则可以使用内置的代码。

如果你不受某些现有的自酿stdbool.h的约束,那么确实使用bool。它将是标准类型,具有类型带来的所有好处。

答案 1 :(得分:4)

他们是一样的。 bool_Bool的别名。 在我们使用的C99之前,我们没有这种类型。 (早期使用仅限于整数tyoe,0表示假,1表示真实)。

您可能不会使用它。即使你可以undef bool(但建议不要这样做)。 但包含它(stdbool.h的{​​{1}}和bool别名是好的,因为如果有一天它变得保留,那么您的代码就符合这一点。 1 < / SUP>

1。您可以使用_Bool其他方式,但最好不要这样做。因为一般情况下引入这个bool它会带来逐步使其成为标准的计划,然后更加严格的规则适用于我们无法使用stdbool.h作为其他内容并且它将保留为关键字

答案 2 :(得分:3)

常见的做法一直是使用bool但是当这种类型被正式引入C99的标准时,他们不想打破“自己动手”的实现。所以他们将_Bool类型作为非官方bool的黑客攻击。现在没有类型名称冲突。无论如何,重点是,使用bool除非遗留代码库中断。