繁体   English   中英

在C99需要_Bool?

[英]Need for _Bool in C99?

我正在读一本关于C的书。它说C99添加了一个数据类型_Bool。 它基本上是一个int但只存储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扩展为0true1宏。

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

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

C ++确实有一个bool类型,因此不会打扰_Bool C99之前,C 没有一个bool类型; 并从<stdbool.h>头文件中的C99定义bool作为扩展为_Bool的宏。

我们已经有了bool

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM