[英]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
的内置类型,其值可以是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 ++中普遍存在。
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.