首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要_Bool in C99?

是否需要_Bool in C99?
EN

Stack Overflow用户
提问于 2014-01-29 02:44:26
回答 4查看 983关注 0票数 3

我正在读一本关于C的书,上面说C99添加了一个数据类型_Bool。它基本上是一个int,但只存储0或1。现在我不明白为什么需要这样的数据类型。我们已经有了bool,它隐式地转换为int,反之亦然。那么,谁能告诉我这样的数据类型将是有用的情况。

PS: C++似乎不支持所见的这里那样的数据类型。

代码语言:javascript
复制
#include <iostream>
using namespace std;

int main() {
    // your code goes here
    _Bool b = false;
    if(b == 0)
        printf("FALSE");
    else
        printf("TRUE");
    return 0;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-29 03:04:52

它说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++中却很普遍。

票数 5
EN

Stack Overflow用户

发布于 2014-05-24 08:38:12

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

例如,对于向整数的转换:

代码语言:javascript
复制
 (_Bool) 0.5

评估为1

鉴于

代码语言:javascript
复制
 (int)  0.5

计算结果为0

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

票数 8
EN

Stack Overflow用户

发布于 2014-01-29 02:47:26

我们已经有嘘声了

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21421061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档