一起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<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类型的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


时间: 2024-08-02 10:45:55

一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)的相关文章

一起talk C栗子吧(第一百六十九回:C语言实例--再谈内置宏)

各位看官们,大家好,上一回中咱们说的是C语言中的布尔–bool类型的例子,这一回咱们说的例子是:再谈内置宏 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在第一百二十四回中介绍了C语言中的内置宏,当时介绍了常用的内置宏_LINE_和_FILE_.并且介绍了如何使用它们来输出它们所在位置的行号和所在的文件名.大家都知道,这两个内置宏经常被用来在文件中添加调试信息.因为我们写的程序难免会有错误,所以需要对程序进行调试.在文件中加入内置宏后,我们通过调试可以快速地找到错误发生在哪个

一起talk C栗子吧(第一百六十四回:C语言实例--const关键字)

各位看官们,大家好,上一回中咱们说的是三目运算符的例子,这一回咱们说的例子是:const关键字 .闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前面章回中介绍了很多系统编程接口,在这些接口的参数中经常出现const关键字,有看官对此提出了疑问"这些const有什么用处呢?".今天,我将和大家一起来解决该疑问. 在C语言中const是一种修饰符,经常用来修饰变量.使用它修饰以后的变量,就成为常量.常量是不允许被修改的.下我们举个简单的例子来说明const的用法. 1 #inc

一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_UNIX域的数据报套接字通信的例子,这一回咱们说的例子是:基于AF_INET域的流套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中一起制作了我们的第二道佳肴是:基于AF_UNIX域的数据报套接字通信.今天,我将和大家一起制作第三道佳肴:基于AF_INET域的流套接字通信. 制作第三道佳肴的菜谱:流套接字过程. 制作第三道佳肴的食材:流套接字的接口,套接字属性,套接字地址信息. 看官们,以上的内容,我们在前面章

一起talk C栗子吧(第一百六十五回:C语言实例--C语言中的常量)

各位看官们,大家好,上一回中咱们说的const关键字的例子,这一回咱们说的例子是:C语言中的常量 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们, 我们在上一回中介绍了const关键字,大家都知道被const修饰的都是常量.提到常量,我们在程序中经常使用它,这一回中我们一起看看C语言中的其它常量. 大家都知道,常量的值是固定的,而且不能被修改.在C语言中,一共有四种实现常量的方式,它们分别是: 字面常量 宏 const 枚举. 接下来我们分别介绍这四种实现常量的方式. 字面常量:字

一起talk C栗子吧(第一百五十九回:C语言实例--基于AF_INET域的数据报套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_INET域的流套接字通信的例子,这一回咱们说的例子是:基于AF_INET域的数据报套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中一起制作了我们的第三道佳肴是:基于AF_INET域的流套接字通信.今天,我将和大家一起制作第四道佳肴:基于AF_INET域的数据报套接字通信. 制作第四道佳肴的菜谱:数据报套接字过程. 制作第四道佳肴的食材:数据报套接字的接口,套接字属性,套接字地址信息. 看官们,以上的内容,我们

一起talk C栗子吧(第三十八回:C语言实例--你了解scanf吗)

各位看官们,大家好,上一回中咱们说的是获取当前日期和时间的例子,这一回咱们说的例子是C语言中的库函数:scanf.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,说到C语言中的库函数:scanf,我想大家都认识它,而且知道它是用来从标准输入中(这里可以当作是终端)获取输入的内容,不过关于该函数的一些小细节,我估计大部分人都不是十分了解,接下来我就把这些小的细节说给大家听. scanf函数有返回值 大家在平常使用scanf函数时,都是为了从终端中获取输入的值,比如:scanf("%d&

一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)

各位看官们,大家好,上一回中咱们说的是套接字通信模型的例子,这一回咱们说的例子是:套接字知识体系图.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们, 我们在前面的章回中介绍了许多关于套接字的内容,有些看官感觉知识比较乱,不断地摇头叹气,而且还在吟诗:剪不断,理还乱,是离愁.不对,是套接字.别有一番滋味在心头.哈哈.这位看官太有才了呀,连古诗也用上了.今天我和大家一起整理下套接字的知识,到时候将会是一番喜悦的滋味在心头. 看官们,我们最开始介绍的是套接字的概念,接着介绍了套接字的属性,

一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型一)

各位看官们,大家好,上一回中咱们说的是基于AF_INET域数据报套接字通信的例子,这一回咱们说的例子是:套接字通信模型 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在前面章回中介绍的内容中提到过通信的次数,当时只是说可以自己设置通信的次数,并没有做详细的介绍,今天我们一起来看看如何设置通信的次数,以及与它的扩展:通信模型. 迭代通信模型 看官们,通信次数的控制主要体现在服务器端,下面是核心代码: 流套接字通信 while(index++ < 2) { client_fd =

一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)

各位看官们,大家好,上一回中咱们说的是C语言中常量的例子,这一回咱们说的例子是:大小写字符转换.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,在程序中经常会用到英文字符,有时候需要把英文字符进行大小写转换.如何进行转换呢?接下来我们一起看看具体的转换方法. 大家都知道每个字符都有相应的ASIIC码,如果把一个字符的ASIIC码加上一个数值就变成了另外一个字符的ASIIC码.比如给字符a的ASIIC码加上1后就成了字符字符b的ASIIC码.基于这个原理,我们可以在小写字符的ASIIC