我正在读一本关于C.的书。 它说C99添加了一个数据类型_Bool。 它基本上是一个int但只存储0或1。 现在我不明白为什么需要这样的数据类型。 我们已经有bool隐式转换为int,反之亦然。 那么有人可以告诉我这种数据类型有用的情况。
PS:C ++似乎不支持here所见的数据类型。
#include <iostream>
using namespace std;
int main() {
// your code goes here
_Bool b = false;
if(b == 0)
printf("FALSE");
else
printf("TRUE");
return 0;
}
答案 0 :(得分:6)
_Bool
与其他整数类型的语义不同。
例如,对于转换为整数:
(_Bool) 0.5
评估为1
,而
(int) 0.5
评估为0
。
(这是_Bool
类型的C99基本原理给出的例子。
答案 1 :(得分:3)
它说C99添加了一个变量_Bool
不,C99添加了一个名为_Bool
的内置类型,其值可以是0
或1
。标头<stdbool.h>
定义了bool
扩展为_Bool
,false
扩展为0
,true
扩展为1
的宏。
C ++有一个名为bool
的内置类型,其值可以是true
和false
。为了兼容性,C ++ 11指定stdbool.h
应该存在,但是为空。 (有些C编译器提供了C ++的bool
作为C99之前的扩展。)
添加C99的目的是提供与C ++相同的功能,但这种方式不会使旧的C89代码无效(其中普通bool
可用作名称)。在我看来,他们提出的宏解决方案并不理想,事实上,看到使用布尔类型的C代码仍然很少见,而它们在C ++中普遍存在。
答案 2 :(得分:2)
C ++确实有bool
类型,因此不会打扰_Bool
。在C99之前,C 不有bool
类型;并从<stdbool.h>
标题{C}上定义bool
作为扩展为_Bool
的宏。
答案 3 :(得分:2)
我们已经有了bool
bool
是_Bool
的宏。这就是我们_Bool
的原因。 (将bool
命名为已破坏已使用该名称的代码; _Bool
不太可能与任何内容发生冲突。)