在C99需要_Bool?

时间:2014-01-29 02:44:27

标签: c++ c

我正在读一本关于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;
}

4 个答案:

答案 0 :(得分:6)

C中的

_Bool与其他整数类型的语义不同。

例如,对于转换为整数:

 (_Bool) 0.5

评估为1

,而

 (int)  0.5

评估为0

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

答案 1 :(得分:3)

  

它说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 ++中普遍存在。

答案 2 :(得分:2)

C ++确实有bool类型,因此不会打扰_Bool。在C99之前,C bool类型;并从<stdbool.h>标题{C}上定义bool作为扩展为_Bool的宏。

答案 3 :(得分:2)

  

我们已经有了bool

bool_Bool的宏。这就是我们_Bool的原因。 (将bool命名为已破坏已使用该名称的代码; _Bool不太可能与任何内容发生冲突。)