9

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

由于stdbool.huses typedef bool _Bool,是否有理由使用标头而不是仅使用 type _Bool?仅用于附加宏(/* #define true 1 #define false 0 */)吗?

4

3 回答 3

9

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

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

因此,stdbool.h如果您不受某些现有的自制bool. 它将是标准类型,具有该类型带来的所有好处。

于 2017-11-19T06:53:35.087 回答
4

常见的做法一直是使用bool,但是当类型在 C99 中正式引入标准时,他们不想破坏“roll-your-own”实现。因此,他们将这种类型_Bool作为一种围绕非官方bools 的 hack。现在没有类型名称冲突。无论如何,重点是,bool除非遗留代码库中断,否则请使用。

于 2017-11-19T06:53:25.980 回答
4

他们是一样的。bool是 的别名_Bool。在我们使用 C99 之前,我们没有这种类型。(之前的使用仅限于整数 tyoe,其中 0 为假,1 为真)。

你可能不会使用它。即使你可以undef bool(但建议不要这样做)。但是包括它(stdbool.hbool别名_Bool)是好的,因为如果有一天它被保留,你的代码就会遵守它。1

1.你可以使用bool其他方式,但最好不要。因为一般来说,当它stdbool.h被引入时,它会逐步使其成为标准,然后在我们不能bool用作其他东西的地方应用更严格的规则,它将被保留为关键字

于 2017-11-19T06:54:07.663 回答