为什么使用 <stdbool.h> 而不是 _Bool?
Why use <stdbool.h> instead of _Bool?
每当我需要布尔类型时,我都会被告知创建一个,或者更好的是,使用 stdbool.h
。
由于 stdbool.h
使用 typedef bool _Bool
,是否有理由使用 header 而不是仅使用类型 _Bool
?是否仅用于附加宏 (/* #define true 1 #define false 0 */
)?
通常的做法一直是使用 bool
,但是当该类型在 C99 中正式引入标准时,他们不想破坏 "roll-your-own" 实现。因此,他们将 _Bool
类型作为一种围绕非官方 bool
的 hack。现在没有类型名称冲突。无论如何,要点是,使用 bool
除非遗留代码库中断。
要添加到语言中的明显类型是 bool
。但不幸的是,编写了大量代码,其中包括 bool
的其他形状和形式。回想一下,仅在 C99 中添加了对布尔类型的支持。
所以C语言委员会只好为它拉出一个保留标识符(_Bool
)。但是,由于类型名称的明显选择仍然相同,因此添加了 stdbool.h
以允许用户使用明显的名称。这样,如果您的代码没有自制的 bool
,您可以使用内置的。
所以,如果您不受某些现有的自制 bool
的约束,请确实使用 stdbool.h
。它将是标准类型,具有该类型带来的所有好处。
他们是一样的。 bool
是 _Bool
的别名。
在 C99 之前我们使用我们没有这种类型。 (早期使用仅限于整数类型,0 为假,1 为真)。
您可能不会使用它。甚至可以 undef
bool
(但建议不要这样做)。 但是包括它(stdbool.h
和 bool
_Bool
的别名)是好的,因为如果有一天它被保留,你的代码会遵守它。1
1. 您可以使用 bool
其他方式,但最好不要使用。因为一般来说,当这个 stdbool.h
被引入时,它有逐渐使其成为标准的计划,然后更严格的规则适用于我们不能将 bool
用作其他东西的地方,它将是 保留为关键词.
每当我需要布尔类型时,我都会被告知创建一个,或者更好的是,使用 stdbool.h
。
由于 stdbool.h
使用 typedef bool _Bool
,是否有理由使用 header 而不是仅使用类型 _Bool
?是否仅用于附加宏 (/* #define true 1 #define false 0 */
)?
通常的做法一直是使用 bool
,但是当该类型在 C99 中正式引入标准时,他们不想破坏 "roll-your-own" 实现。因此,他们将 _Bool
类型作为一种围绕非官方 bool
的 hack。现在没有类型名称冲突。无论如何,要点是,使用 bool
除非遗留代码库中断。
要添加到语言中的明显类型是 bool
。但不幸的是,编写了大量代码,其中包括 bool
的其他形状和形式。回想一下,仅在 C99 中添加了对布尔类型的支持。
所以C语言委员会只好为它拉出一个保留标识符(_Bool
)。但是,由于类型名称的明显选择仍然相同,因此添加了 stdbool.h
以允许用户使用明显的名称。这样,如果您的代码没有自制的 bool
,您可以使用内置的。
所以,如果您不受某些现有的自制 bool
的约束,请确实使用 stdbool.h
。它将是标准类型,具有该类型带来的所有好处。
他们是一样的。 bool
是 _Bool
的别名。
在 C99 之前我们使用我们没有这种类型。 (早期使用仅限于整数类型,0 为假,1 为真)。
您可能不会使用它。甚至可以 undef
bool
(但建议不要这样做)。 但是包括它(stdbool.h
和 bool
_Bool
的别名)是好的,因为如果有一天它被保留,你的代码会遵守它。1
1. 您可以使用 bool
其他方式,但最好不要使用。因为一般来说,当这个 stdbool.h
被引入时,它有逐渐使其成为标准的计划,然后更严格的规则适用于我们不能将 bool
用作其他东西的地方,它将是 保留为关键词.