当前位置:编程学习 > C/C++ >>

C语言中有没有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 <stdbool.h> 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类型而不是自己去定义,引入头文件<stdbool.h>即可,该头文件位于

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

 

 

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,