c语言中怎么定义布尔类型变量

本文介绍了在C语言中如何定义和使用布尔类型变量,包括自定义布尔宏定义以及使用标准头文件<stdbool.h>中的bool类型。
#include<stdio.h>
#include<stdbool.h>    // 添加该头文件,就可以使用 bool true false 
// std standard    标准
// bool boolean 布尔

int main()
{
    // 1.使用布尔值还需要额外添加头文件的原因是,c语言其实没有真正布尔类型。老的c语言用int表示布尔类型,0表示假,1表示真

    // 下面是示例代码,判断考试分数,是及格还是不及格
    int yuwen = 80;        // 语文分数
    int shuxue = 58;    // 数学分数
    int yuwenjige = 0;    // 记录语文是否及格
    int shuxuejige = 0;    // 记录数学是否及格

    if (yuwen > 60)
    {
        yuwenjige = 1;
    }

    if (shuxue > 60)
    {
        shuxuejige = 1;
    }

    
    if (yuwenjige == 1)
    {
        printf("语文及格\n");
    }
    else
    {
        printf("语文不及格\n");
    }

    if (shuxuejige == 0)
    {
        printf("数学不及格\n");
    }
    else
    {
        printf("数学及格\n");
    }


    // 2.现在的c语言,最新c语言标准新增加了一个关键字_Bool,表示布尔类型,这才使得c语言真正拥有了布尔类型。
    // 但奇怪的是c语言并没有增加布尔类型的字面值(true,false),而是继续使用0表示假,1表示真
    

    // 字面值:就是常量,就是能直接写出来的值
    // int a = 10;            // a是整型变量,10是整型类型的字面值
    // double b = 3.14;        // b是浮点型变量,3.14是浮点类型的字面值
    // double c = 20 + 2.5; // c是浮点型变量,20是整型类型的字面值,2.5是浮点类型的字面值

    // 使用新关键字_Bool,上面的代码可以改写成

    {    // 这里最外面加了大括号,是因为防止变量名相同,导致的报错

        int yuwen = 80;        // 语文分数
        int shuxue = 58;    // 数学分数
        _Bool yuwenjige = 0;    // 记录语文是否及格
        _Bool shuxuejige = 0;    // 记录数学是否及格

        if (yuwen > 60)
        {
            yuwenjige = 1;
        }

        if (shuxue > 60)
        {
            shuxuejige = 1;
        }


        if (yuwenjige == 1)
        {
            printf("语文及格\n");
        }
        else
        {
            printf("语文不及格\n");
        }

        if (shuxuejige == 0)
        {
            printf("数学不及格\n");
        }
        else
        {
            printf("数学及格\n");
        }
    }



    // 3. c语言标准,虽然增加了_Bool关键字来表示布尔类型,但是这个关键字太丑了,又是下划线,又是首字母大写,难看又难写,
    // 而且布尔类型没有属于自己的的字面值,有点牵强的用整数的0表示假,用1表示真。
    // 要是能用关键字bool表示布尔类型,false表示假,true表示真就好了。但是c语言标准就是这么定的,这是改变不了的事实。
    

    // 办法也不是没有,那就是神奇的预处理命令#define,它的功能是文本替换。
    // 基本格式是:#define 文本1 文本2 ,从该语句定义这行到最后一行的范围内搜索“文本1”,然后把“文本1”全部替换成“文本2”
    // 下面是预处理#define用法例子:
    

    {
#define zhengshu int    // 遇到文本zhengshu,就替换成int
#define ershi 20        // 二十,遇到文本ershi,就替换成20

        zhengshu a = 10;
        zhengshu b = ershi;
        zhengshu c = 0;
        c = a + b;
        printf("c = %d\n", c);    // 输出:c = 30
    }

// 编译器在编译的过程中,第一步就是处理预编译指令,找到所有的#define语句,替换文本,然后删除掉预处理指令语句本身。完成后才开始编译真正的源代码。
// 下面就是编译器处理完预编译指令#define,替换文本后代码的样子,完成这一步后,才开始真正的编译代码。
//    {
//        int a = 10;
//        int b = 20;
//        int c = 0;
//        c = a + b;
//        printf("c = %d\n", c);
//    }

    
    


    // 利用#define预处理指令的特性,聪明的程序员就可以来个障眼法。 
    // 先设定三个替换规则,把bool替换成_Bool,把true替换成1,把false替换成0,这样就可以愉快的使用bool,true,false三个关键字了。
    // 唯一的要求就是,在每个文件的开头加上这三行#define预处理指令语句。

    // 最后c语言标准委员会觉得这样挺好,就把这三行代码放进一个叫stdbool.h的头文件中,这样程序员就不用每次手写这三行代码,直接包含这个头文件就行了
    // 这就是为什么使用bool,true,false这三个关键字,需要包含#include<stdbool.h>头文件的原因了。

    // 也就是如果想使用bool,true,false这三个关键,有两种方法,要么手动写这三行#define代码,要么包含#include<stdbool.h>头文件

    // 下面是使用bool,true,false这三个关键字,改写后的代码

    {    

#define bool _Bool
#define true 1
#define false 0

        int yuwen = 80;        // 语文分数
        int shuxue = 58;    // 数学分数
        bool yuwenjige = false;    // 记录语文是否及格
        bool shuxuejige = false;    // 记录数学是否及格

        if (yuwen > 60)
        {
            yuwenjige = true;
        }

        if (shuxue > 60)
        {
            shuxuejige = true;
        }


        if (yuwenjige == true)
        {
            printf("语文及格\n");
        }
        else
        {
            printf("语文不及格\n");
        }

        if (shuxuejige == false)
        {
            printf("数学不及格\n");
        }
        else
        {
            printf("数学及格\n");
        }
    }
}


评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值