标签:
各位看官们,大家好,上一回中咱们说的是控制终端字符颜色的例子,这一回咱们说的例子是:C语言中的布尔–bool类型 。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,在数字电路中我们经常会遇到布尔类型,其实在编写软件的过程中也会使用布尔类型。布尔类型的变量只有两种值:真和假。在实际的编程过程中,我们经常定义宏,然后使用1表示真,0表示假。下面是具体的例子:
#define TRUE 1
#define FALSE 0
例子中定义了两个宏,一个是TRUE,它的值是1,表示真;另外一个是FALSE,它的值是0,表示假。这样的代码经常在程序中出现。其实,在咱们前面章回的例子中就经常有这样的代码,可能大家觉得这样的代码已经习以为常了。
有看官说,虽然只有两行代码,但是每次都定义这样的宏也很麻烦呀。这位看官说的对,其实不只你有这样的烦恼,很多人也对此很烦恼。于是C语言把布尔类型当作自己的内嵌类型,也就是说你可以像使用int,char等内嵌类型一样使用布尔类型了。它的使用方法如下:
bool bool_value = true;
在使用bool类型时需要包含头文件:#include<stdbool.h>
,还有一种使用方法如下:
bool _Bool_value = 1;
在该方法中可以直接使用_Bool类型,而不需要包含任何头文件。不过我们不推荐这种使用方法。C语言中几乎没有哪个类型前面还有个下划线,看着是多么的不和谐呀。
接下来我们通过具体的例子来说明如何使用布尔类型。
#include<stdio.h>
#include<stdbool.h>
int main()
{
//_Bool flag = 1;
bool flag = true;
int index = 3;
while(index-- > flag)
{
if(flag)
{
printf("flag is: %d \n",flag);
flag = false;
}
else
{
printf("flag is: %d \n",flag);
flag = true;
}
}
return 0;
}
在上面的例子中,我们定义了布尔类型变量flag,并且给它赋值为true。然后分别以十进制的形式输出它的真值和假值,下面是程序的运行结果:
flag is: 1 //布尔类型的真值
flag is: 0 //布尔类型的假值
从上面的运行结果中可以看到,布尔类型的值可以转换为十进制的1和0。此外,我们在例子中还对布尔类型的变量和int类型的变量进行大小比较,这说明布尔类型变量可以转换为int类型变量。不过在使用的时候,我们建议使用true和false对布尔类型的变量进行赋值,而不要把int类型变量的值转换布尔类型变量的值。
这时有看官实然说,上面的例子有编译错误。 我想问一下这位看官,你用的是GCC吗?如果不是的话,使用GCC来编译上面的例子,或者把你的编译器升级一下。因为布尔类型是在C99中新增加的类型,C89以及之前的C语言中没有布尔类型。因为一些旧版本的编译器或者不支持C99的编译器不认识布尔类型,所以会有编译错误。
我使用的是GCC(版本为4.8),该版本的GCC支持布尔类型,而且有布尔类型的定义,我们可以打开头文件:stdbool.h
来看看:
less /usr/lib/gcc/i686-linux-gnu/4.8/include/stdbool.h
在终端中运行该命令后,就可以打开该文件,下面是文件中的内容,请大家参考:
/*
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined 1
#endif /* stdbool.h */
各位看官,关于C语言中的布尔–bool类型的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)
标签:
原文地址:http://blog.csdn.net/talk_8/article/details/51787462