需要 C99 中的_Bool?

Need for _Bool in C99?

本文关键字:Bool 中的 C99 需要      更新时间:2023-10-16

我正在读一本关于C的书。 它说C99_Bool中添加了一个数据类型。 它基本上是一个整数,但只存储 0 或 1。 现在我不明白为什么需要这样的数据类型。 我们已经有 bool 隐式转换为 int,反之亦然。 所以有人可以告诉我这种数据类型有用的情况。

PS:C++似乎不支持此处看到的此类数据类型。

#include <iostream>
using namespace std;
int main() {
// your code goes here
_Bool b = false;
if(b == 0)
printf("FALSE");
else
printf("TRUE");
return 0;
}

C 中的_Bool与其他整数类型没有相同的语义。

例如,对于转换为整数:

(_Bool) 0.5

评估结果为1

(int)  0.5

评估为0.

(这是 C99 基本原理给出的_Bool类型示例)。

它说 C99 添加了一个变量_Bool

不,C99 添加了一个名为_Bool的内置类型,它可以具有01的值。标头<stdbool.h>定义了宏,其中bool扩展到_Boolfalse扩展到0true扩展到1

另一方面,C++有一个内置类型称为bool,它可以具有truefalse的值 .为了兼容,C++11 指定stdbool.h应存在,但为空。(一些 C 编译器将 C++ 的bool作为 C99 之前的扩展提供。

添加 C99 的目的是提供与 C++ 相同的功能,但不会使旧的 C89 代码无效(其中普通bool可用作名称)。在我看来,他们提出的宏解决方案并不理想,事实上,使用布尔类型的 C 代码仍然很少见,而它们在C++中

普遍存在。

我们已经有了布尔值

bool_Bool的宏。这就是为什么我们有_Bool.(将其命名为bool会破坏已经使用该名称的代码;_Bool不太可能与任何东西发生碰撞。

C++确实有一个bool类型,所以不会打扰_Bool。 在C99之前,C没有bool类型;从 C99 开始,<stdbool.h>标头bool定义为扩展到_Bool的宏。