C语言布尔类型的前世今生

起初,C语言并没有布尔类型,都是使用int类型的变量来表示布尔值(时至今日大家也基本都这样弄)。_Bool是C99标准(1999年的标准)新增的数据类型,用于表示布尔值(即逻辑值true和false)的数据类型。

那么C语言设计之初为什么没有bool类型,而后来又怎么搞出个_Bool来呢?

这就得说说C语言的设计理念了。

一、设计初心:简洁性

C语言的设计初衷是提供一种简洁、高效的编程语言。bool型能干的int全都能干,多搞出个数据类型有什么意义呢?于是,为了保持语言的简洁性,并未引入布尔类型。

二、引入原因:可读性需求

斗转星移,越来越多的C程序员看着别的编程语言风骚地使用着bool、true、false直流口水,人们普遍认为有这三位英雄罩着能提高代码的可读性。

没啥要啥,缺啥想啥。饥渴难耐的程序员们该怎么办呢?

没有枪,没有炮,自己给自己造。

万能的“宏”啊,请赐予我bool吧!

#define bool int
#define true 1
#define false 0

后来官方也做出响应,在C99标准增设了布尔类型。只是这个布尔类型不是像bool、BOOL这样的美男子,而是这样一个怪胎:_Bool。

为什么要起这个不招待见的名呢?

很大的可能是要避免与程序员前面的自制版bool产生冲突。

假设将布尔类型命名为bool,那么遇到以前的自制版bool,会产生什么化学反应呢?

因为#define bool int的存在,在编译时会自动将所有的bool替换为int,相当于这个新设的bool类型完全没起作用。用下面的代码可以验证这一点。

#include <stdio.h>
#define bool int
int main()
{
    printf("%d %d\n", sizeof(_Bool), sizeof(bool));
    return 0;
}

结果输出:1 4

正常布尔类型只占1个字节(这其实也是bool类型的一个存在价值,占用内存比int型小),但因为bool被替换为int,所以sizeof(bool)输出的是4个字节。

对这个其貌不扬的孩子,人人见了都倒胃口,实在没人愿意用。官方又想了个折衷的办法,就是把民间办法官方化,建了一个标准库 <stdbool.h>。在这个头文件中是这样的熟悉配方:

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

从此以后,我们不用自己造炮了,只要加上<stdbool.h>头文件,就可以像其他语言一样使用bool、true、false。

可是,毕竟还要加上<stdbool.h>这个头文件,多少还是让人有些不爽。

官方于是在2023年终于给出了终极配方。

三、内置bool类型

在C23标准中,增加bool、true、false三个关键字,正式把bool作为布尔类型。这一天意味着三傻正式进军宝莱坞。

只是这个标准目前很多编译器还不支持,老金实际测试自己的编译器就不行。

#include<stdio.h>
int main(){
    bool b = true;
    printf("%d\n", b);
    return 0;
}

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金创想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值