设为首页 加入收藏

TOP

C语言中有没有bool类型?
2014-11-23 23:29:57 来源: 作者: 【 】 浏览:1
Tags:言中 有没有 bool 类型

问题
首先请大家回想一下,在你们所编写的C程序中,是否使用过bool(布尔)类型?bool类型一般用来表示真假,是程序设计中一个很基本的数据类型。但是,C语言里面并不直接支持bool类型。一些初学C语言,或者是对C语言不是很精通的朋友肯定觉得很奇怪,为什么在C++,JAVA等语言里使用的bool类型,在C语言里无法使用了呢?

问题解析
bool类型的变量,为0时表示为假,为非0时表示为真。但是原始C语言中并不支持bool类型,若需要使用bool类型可以借用int类型自己定义一下,例如:

[cpp]
typedef int bool;
#define TRUE 1
#define FALSE 0

然后就可以在程序中使用bool类型了。用32位的int类型来当bool使用,这样无疑浪费了内存资源,因此对于内存敏感的程序中可以使用char来定义bool类型:


[cpp]
typedef char bool;
#define TRUE 1
#define FALSE 0

进一步讨论
C语言并非没有bool类型,而是在C99标准之前没有。C99标准中新增的头文件中引入了bool类型,与C++中的bool兼容。该头文件为stdbool.h,其源码如下所示:


[cpp]
#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标准为bool类型引入的新的关键字,sizeof(_Bool)的值为1,表面其为bool类型。既然为bool类型,那么0表示为假,其他任何值都表示为真,我们可以做一个小实验来测试一下:
[cpp]
bool bb=10;
bool aa=0;
printf(" %d %d \n",bb,aa);

输出的结果为1和0,这表明bool类型变量赋值为非0值得时候,只存储其值为1。


最后,当需要使用bool类型时,推荐使用C99标准的bool类型而不是自己去定义,引入头文件即可,该头文件位于

/usr/lib/gcc/i386-redhat-linux/4.1.1/include/stdbool.h(以我自己的Linux系统为例)。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言程序判断计算机的CPU大小端 下一篇C语言宏定义技巧

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: