#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");
}
}
}
c语言中怎么定义布尔类型变量
于 2023-03-11 11:55:17 首次发布
本文介绍了在C语言中如何定义和使用布尔类型变量,包括自定义布尔宏定义以及使用标准头文件<stdbool.h>中的bool类型。
691





