首页 > 编程知识 正文

bool istrue,bool返回值

时间:2023-05-06 07:45:43 阅读:137570 作者:3933

在C99中添加的bool关键字

以现有的(C90的) c标准,是不能如意的饼干类型,对于c来说,如果不是0则为真,如果不是0则为假。

在c中,所有表达式的结果都为1 (真或0 )假,以表示真伪值(所需的饼干值)。 C99标准引入了新的类型_Bool,即期望的饼干类型,期望的饼干类型变量只能存储1或0的整数值,并且可以用整数值(伪值)和浮点零值)替代C99 此外,由于宏将true和false分别定义为1和0的字面量,因此编写的代码与c兼容。 因为c把true和false看作关键词。

注意:上面的代码使用的是C11通用表达式_Generic,因此必须将编译器标记为-std=c11。 这意味着整个_Generic表达式的值必须与成功冒号之后的值匹配。 也就是说,接受几个参数。 第一个参数必须是与c语言一致的表达式

分析输出的三行结果的含义:

1 .这表明_Bool类型占用一个字节。 对于令人在意的cookie类型,理论上占用1bit的空间就足够了,但大多数编译器在实际实现中采用1字节。 因为以现在的计算机内存性能来看,没有必要减少其7bit的空间。

2 .很明显,标志的类型是_Bool

3 .这很重要! 如上所述,在c语言中,只使用int型作为条件式的值,如果条件为真,则公式的值为1,如果条件为假,则公式的值为0

4 .验证了以上第3点,即使是_Bool型的变量,进行逻辑运算时返回的结果仍然是int型。

因此,_Bool没有改变c的规则。 对于所有的条件式,仍然用1表示真,用0表示假。 通过添加它,作者可以更直观地创建想要保存cookie值的变量。

_Bool类型必须这样使用。 要代入_Bool类型,必须使用表达式的值或返回_Bool类型的函数。

原文链接:

3359 www.cn blogs.com/ryzz/p/12325813.html

C99标准定义了新的关键字_Bool,提供了令人在意的cookie类型。 以前,C程序员总是用自己的方法定义自己喜欢的cookie类型。

0表示false,0以外表示true。

可以使用char类型表示所需的cookie类型,也可以使用int类型表示所需的cookie类型。

许多包装器定义了自己喜欢的cookie类型和相应的宏。 枚举,typedef。

现在C99把C语言原生的顺心的饼干类型带来了。

#includestdbool.h这个头文件定义了bool、true、false等宏。 如果#ifndef__cplusplus是纯c而不是c,则定义宏bool相当于_Bool类型。 对于# define bool _bool # define true1# define false0# else/* _ _ cplusplus */c,定义_ bool类型为bool类型。/* supporting stdbool.hincisagccextension.*/# define _ bool bool # definefalsefalse # define true true # define _ bool _ true _ false _ are _ defined 1检查上述宏是否==1,如果是,则表示可以使用上述定义。

C2008草案说:

anobjectdeclaredastype _ boolislargeenoughtostorethevalues0and 1。

也就是说,只规定了_Bool型的大小至少可以存储0和1这两个值。 具体的大小还没有决定。 这交给编译器自由发挥。

我在gcc做了一个测试:

打印(sizeof (bool ) :%d(n ),sizeof (bool ) ); 打印(sizeof (char ) :%d(n ),sizeof (char ) ); 打印(sizeof (int ) :%d(n ),sizeof (int ) ); 打印(sizeof (long ) :%d(n ),sizeof (long ) ); sizeof (bool ) :1

sizeof (char ) :1

sizeof (int ) :4

sizeof (long ) :8

gcc似乎在char中实现了_Bool类型。

让我们看看给_Bool类型赋值会发生什么。

布尔=-11212112; 布尔: % d (n ),布尔(printf ); 布尔:1

看来,gcc编译器对_Bool类型进行了自己的转换处理。 如果将0分配给_Bool类型,则分配0。 如果是任意其他数据,代入1! (但是,不知道其他编译器是否会这样处理,C2008标准案中没有详细叙述这一部分)

以前一直在用! 非逻辑运算符:

if (! (flag )表示0和0以外。 当前_Bool类型只有0和1两个值!

文章来源:

3359 blog.csdn.net/u 013256622/article/details/50925795

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。