gpt4 book ai didi

浅谈C语言编程中的布尔bool数据类型

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈C语言编程中的布尔bool数据类型由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

我们知道在C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0为假,非0为真。所以条件判断语句( if(…)、while(…) )非常灵活,甚至一个指针类型都可以是条件表达式。   为了使程序更清晰,我们常常会给出如下的宏定义:

?
1
2
3
typedef int BOOL ;
#define TRUE 1
#define FALSE 0

  这是最常见的写法,能被任何C语言编译器认可。   今天我在一段程序里看见这么一行 #include ,这个陌生的头文件还以std打头而且还和bool有关,引起了我的警觉,立刻百度之。得知这是C99标准新增的头文件,意在引入bool类型,使之和C++兼容。随后我看了一下这个头文件的源代码,内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
* ISO C Standard: 7.16 Boolean type and values
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting 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 */

  这个头文件很短,而且也很明了,不过我对_Bool这个类型产生的兴趣。又一翻百度,发现这是C99标准引入的新的关键字。对,是关键字,而不是宏定义,也不是typedef。通过sizeof(_Bool);得知这个类型占1个字节,而且无论给这个类型的变量赋任何非0整数值,其值都是1,这也说明了他不是其他整数类型的别名。   好了,其实说白了,C语言不是没有布尔类型,只能说在C99标准之前没有。现在只要在源文件中包含stdbool.h这个头文件,就可以在C语言里像C++那样使用bool类型了。 所以如果是C99之前的标准,需要我们自己定义bool,如 。

?
1
typedef enum { false = 0, true = 1} bool ;

那么我们就来看一下C语言中的相关定义: 1.FALSE/TRUE与false/true的区别:      false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途 是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:

?
1
2
3
4
5
6
#ifndef  FALSE
#define  FALSE  0
#endif
#ifndef  TRUE
#define  TRUE  1
#endif

也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过 我们在使用中没有这种感觉,因为C++会帮你做隐式转换。 2.bool的大小与BOOL的区别: bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以 来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言,以下是BOOL在windef .h中的定义:typedef   int   BOOL; 3.NULL与0的区别:      还是让我们看一下windef.h中NULL的定义:

?
1
2
3
4
5
6
7
#ifndef  NULL
#ifdef  __cplusplus//这个是指示是用C++来编译程序
#define  NULL  0
#else
#define  NULL  ((void  *)0)
#endif
#endif

所以说:它们没有区别,只不过在C里面会做一个强制类型转换.

最后此篇关于浅谈C语言编程中的布尔bool数据类型的文章就讲到这里了,如果你想了解更多关于浅谈C语言编程中的布尔bool数据类型的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com