需要 C99 中的_Bool?
Need for _Bool in C99?
我正在读一本关于C的书。 它说C99_Bool中添加了一个数据类型。 它基本上是一个整数,但只存储 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++中
我们已经有了布尔值
bool
是_Bool
的宏。这就是为什么我们有_Bool
.(将其命名为bool
会破坏已经使用该名称的代码;_Bool
不太可能与任何东西发生碰撞。
C++确实有一个bool
类型,所以不会打扰_Bool
。 在C99之前,C没有bool
类型;从 C99 开始,<stdbool.h>
标头bool
定义为扩展到_Bool
的宏。
- 返回 bool 作为 CPP 中 bool 运算符 [] 中的值
- 如何从C++中的值向量构造整数<bool>值
- Visual Studio 2017中的哪些扩展在传入lambda时消除了"bool"与"std::function"的歧义?
- 计算标准::矢量<bool>中的设定值
- 我可以在没有静音的线程中读取线程中的bool变量
- 防止在执行时将两个类中的两个对象转换为 bool:if(a!=b)
- 返回 std::p air<const CustomClass &, bool> 用于搜索函数中的失败情况,当 CustomClass 是抽象基类时
- 在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
- C 如果一个线程写入Bool曾经完成,则可以安全地阅读单个线程中的循环中的Bool
- 功能模板专业化中的bool返回值
- 在Tensorflow源代码中的Bool变量的初始化
- 在模板参数中更改bool值的类型
- 从模板类中的Bool值超载成员
- Bool排序的插入函数,检查列表中是否已经存在int
- bool表示c语言中的函数
- boost中的安全bool成语
- Visual Studios C++代码中的错误。Lab4.obj : 错误 LNK2019: 未解析的外部符号"bool __cdecl
- 类中的 bool 方法 控件可能到达结束 o 非空函数
- 我的代码试图找到 0 - n 个数字之间的所有素数,语句"bool prime[n + 1];"中的'+ 1'有什么用?
- 删除矢量元素使用矢量<bool>中的条件