BOOL和bool

(C) 2008 蒋维

上周突然有人问我BOOL和bool的区别。留在这里备忘。
首先说在C89中,没有布尔值这个东西的定义。也就是说不是C语言标准支持的数据类型。但是在平时的代码中需要经常用到布尔型,所以常用的手法就是进行重定义一个BOOL的类型

BOOL的定义有好多种:
<code>
typedef BOOL unsigend char
typedef BOOL int
#define BOOL unsigend short
</code>
……
上面这些写法都正确。在不带任何库,任何框架的纯C情况下,如果你不手动定义BOOL类型就不能使用。编译器会报错的。

在C++和C99的标准后才加入了对bool类型的默认支持,也就是说你可以在C++和支持C99的C编译器中直接使用bool(全部小写)定义一个布尔变量。不用再手工定义。其实bool的实现和BOOL是类似的。也是使用现有类型进行了重定义。
另外就是BOOL和bool的数据大小。由于BOOL是有用户定义的所以大小就不固定。但是bool在内存中占据一个字节,也就是sizeof(bool) == 1。

还有就是注意TRUE和true的区别,和前面的描述一样,前者要手动定义,后者是C++和C99默认支持。

#define TRUE 1
#define FLASE !TRUE

在平时的代码中BOOL定义不好的华容易出现一些错误,比如:

BOOL foo( void )
{
    return 2;    //暂且不说返回2逻辑上是不是有问题   
}

if ( foo() == TRUE ){
    ……
}else if ( foo() == FALSE ){
    ……
}

foo() == TRUE不是一种好的写法,既然是booleam类型就应该if( foo() ) 这样使用,但BOOL的定义不固定,所以编译器在进行严格语法检查时会给出警告。但写成if( foo() == TRUE )不但逻辑别扭,而且也容易错误。
所以BOOL类型一定要使用TRUE和FALSE来赋值。

以上
蒋维
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值