一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)
各位看官们,大家好,上一回中咱们说的是控制终端字符颜色的例子,这一回咱们说的例子是: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
,还有一种使用方法如下:
bool _Bool_value = 1;
在该方法中可以直接使用_Bool类型,而不需要包含任何头文件。不过我们不推荐这种使用方法。C语言中几乎没有哪个类型前面还有个下划线,看着是多么的不和谐呀。
接下来我们通过具体的例子来说明如何使用布尔类型。
#include #include 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 */ #ifndef _STDBOOL_H #define _STDBOOL_H #ifndef __cplusplus #define bool _Bool #define true 1 #define false 0 #else /* __cplusplus */ /* Supporting 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语言实例--在printf函数中设置输出宽度三)
-
一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)
-
一起talk C栗子吧(第一百三十九回:C语言实例--文件操作:基于文件描述符二)
-
一起talk C栗子吧(第一百三十八回:C语言实例--文件操作:基于文件描述符一)
-
一起talk C栗子吧(第一百一十八回:C语言实例--线程死锁二)
-
一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)
-
一起talk C栗子吧(第一百零一回:C语言实例--使用信号量进行进程间同步与互斥二)
-
一起talk C栗子吧(第一百零六回:C语言实例--生产者与消费者问题二)
-
一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)
-
一起talk C栗子吧(第一百零二回:C语言实例--使用信号量进行进程间同步与互斥三)