现在的位置: 首页 > 综合 > 正文

BOOL和bool的区别详解(BOOL设置的合理性辩证)

2018年06月06日 ⁄ 综合 ⁄ 共 1582字 ⁄ 字号 评论关闭

许多人对于BOOL和bool区别不开。到底BOOL和bool有没有区别,如果有的话又有哪些区别。进而可以引出False/True和true/false以及NULL和0到底有哪些区别的问题。就这些问题本文将一一解释。

问题1: 到底C/C++有没有定义布尔类型?

这个问题不能简单的说定义或者没有定义。不同版本的C标准会有不同的结果。

在C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真。所以我们通常使用逻辑变量的做法。

C99提供了_Bool 型引入布尔类型,所以布尔类型可以声明为 _Bool flag。

_Bool依然仍是整数类型,但与一般整型不同的是,_Bool变量只能赋值为0或1,非0的值都会被存储为1。

 C99还提供了一个头文件 <stdbool.h> 定义了bool代表_Bool,true代表1,false代表0。只要导入 stdbool.h ,就能非常方便的操作布尔类型了。但是理论上说C/C++没有正式的定义bool类型。

问题1的详细论述可以参考:http://www.cnblogs.com/pharen/archive/2012/02/06/2340257.htm

问题2:BOOL和bool有什么区别?

1.定义不同

C程序中没有bool关键字,但是在C++程序中(使用命名空间)将bool定义成为内置数据类型,BOOL是微软定义的typedef int BOOL(在windef.h中)。与bool不同,它是一个三值逻辑,TRUE/FALSE/ERROR,返回值为大于0的整数时为TRUE,返回值为0时候,为FALSE,返回值为-1时为ERROR。许多的API函数返回值都是BOOL类型。使用时需要添加<window.h>的头文件

2.类型不同

bool为布尔型   BOOL为int型
3、长度不同
bool只有一个字节 BOOL长度视实际环境来定,一般可认为是4个字节
3、取值不同
bool取值false和true,是0和1的区别; false可以代表0,但true有很多种,并非只有1。
下面该说说True/False和true/false的区别
1.FALSE/TRUE与false/true的区别:
false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这要用途
是解决程序在C与C++中环境的差异,以下是FALSE/TRUE在windef.h的定义:
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
也就是说FALSE/TRUE是int类型,而false/true是bool类型;所以两者不一样的,只不过
我们在使用中没有这种感觉,因为C++会帮你做隐式转换。
NULL和0的区别
还是让我们看一下windef.h中NULL的定义:
#ifndef NULL
#ifdef __cplusplus//这个是指示是用C++来编译程序
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
所以说:它们没有区别,只不过在C里面会做一个强制类型转换。
3typedef   long   BOOL;  
  #define   FALSE       0  
  #define   TRUE         1
typedef   long   BOOL;  
  #define   FALSE       0  
  #define   TRUE         1
4BOOL   其值为1(TRUE)/   0(FALSE),是int类型  
  bool   A   variable   of   this   type   can   have   values   true   and   false,是Boolean   类型
一个是枚举,一个是内置
详细内容可以参考:http://guoxinmiao8.blog.sohu.com/97700832.html

抱歉!评论已关闭.