首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >原来c语言也有布尔类型!

原来c语言也有布尔类型!

原创
作者头像
李述铜
修改2025-10-16 09:54:42
修改2025-10-16 09:54:42
1490
举报
文章被收录于专栏:C语言C语言

由于所学够用,因此工作后很多年没有专门去买本其他作者写的C语言相关的书。直至最近突发其想,买了《C Primmer Plus》回来,快速地阅读了一遍,学到了不少新的东西。因此,在本文及后期的文章中,我会将这些新的东西写一下供大家参考。本文主要介绍C99标准中新增加的_Bool类型。

没有布尔类型的那些年

在C89和C90标准中,不存在布尔类型。但是,实际工作中往往需要进行逻辑判断。C语言本身支持逻辑处理,即将结果为0视作fase,将非0值视作true。但是,如果我们希望在程序中定义变量来存放逻辑值。常见的做法是选取一个整数类型(如int),然后将其值设置为1或0来表示true或false。

代码语言:javascript
复制
int flag = 1;   // true
if (flag) {
    printf("真的!\n");
}
flag = 0;       // false
if (!flag) {
    printf("假的!\n");
}

有的同学可能会使用宏定义来创建TRUE和FALSE,从而避免在程序中直接使用1和0.

代码语言:javascript
复制
#define  TRUE 1
#define  FALSE 0

这种做法没有问题,直到现在仍然适用。不过,从C99标准开始,C语言终于针对这种类型的变量新增了_Bool类型。如此一来,我们就可以在项目中直接使用这种类型,而无需花时间采用上述方法。

C99中的_Bool类型

和int等类型一样,_Bool类型是C编译器本身支持的类型。我们无需对工程做任何处理就可以使用。在实际项目中,为了更加方便地使用,可以在源文件中包含<stdbool.h>头文件。该头文件对_Bool类型添加了别名bool,同时增加了true和false两个宏的实现。

名称

作用

实际定义

bool

布尔类型

typedef _Bool bool

true

#define true 1

false

#define false 0

也就是说,该头文件其实是对_Bool的“语法糖”。如果你不想使用stdbool.h,也可以自行实现。不过,既然已经有了,那为什么不直接使用现成的呢?如何使用bool类型下面给出了一个简单的示例,演示了如何使用bool类型。

代码语言:javascript
复制
#include <stdio.h>
#include <stdbool.h>
int main(void) {
    bool is_ready = true;
    bool has_error = false;
    if (is_ready && !has_error) {
        printf("系统准备就绪!🚀\n");
    } else {
        printf("系统未准备好。\n");
    }
    printf("is_ready = %d\n", is_ready);
    printf("has_error = %d\n", has_error);
    return 0;
}

与使用int类型来表示布尔类型相比,上述代码的可读性更好、语义更清晰,我们可以通过is_read和has_error的类型来得知其表示逻辑值。

总结

从上面的内容可以知,虽然C99引入了_Bool类型,并且我们可以通过包含<stdbool.h>从而能使用bool、true、false;但是,其具体的使用方法和效果与我们以前的方法没有太大区别。

即便如此,使用C99的该特性,倒是避免了我们自己重复造轮子,从而节省了工作量。

在后面的文章中,我会继续介绍《C Primmer Plus》中一些比较有意思的内容。


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 没有布尔类型的那些年
  • C99中的_Bool类型
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档