搜索
查看: 1753|回复: 8
打印 上一主题 下一主题

bool类型

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-10 13:46:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
论坛硬说有不合法内容
只能发图片了

862ab637jw1e6ho85tof2j20c81d342k.jpg (35.82 KB, 下载次数: 8)

862ab637jw1e6ho85tof2j20c81d342k.jpg

最佳答案

查看完整内容

1. _Bool是在C99中新增的类型,c99之前的编译器不支持 2. _Bool和bool在未赋值前并不是1,而是未指明的,这点适用于C和C++中所有局部变量 #ifndef __cpluscplus 是用来识别编译器的,如果是一个(标准的)c++编译器,那么就会定义__cplusplus这个宏 在c99之前,用宏的方法来实现bool是个比较常见的手法,例如 #ifndef __cpluscplus #define bool int #define true 1 #define false 0 #endif 如果不是c++编译器,就把 ...
沙发
发表于 2013-7-10 13:46:07 | 只看该作者
1. _Bool是在C99中新增的类型,c99之前的编译器不支持
2. _Bool和bool在未赋值前并不是1,而是未指明的,这点适用于C和C++中所有局部变量

#ifndef __cpluscplus
是用来识别编译器的,如果是一个(标准的)c++编译器,那么就会定义__cplusplus这个宏

在c99之前,用宏的方法来实现bool是个比较常见的手法,例如
#ifndef __cpluscplus
#define bool int
#define true 1
#define false 0
#endif
如果不是c++编译器,就把bool替换成int,把true替换成1
c99把这种做法一同标准化了

c99不能直接使用bool这个类型,因为很多代码已经像上面那么写了,如果定义一个bool类型就会引起问题
板凳
 楼主| 发表于 2013-7-10 13:47:48 | 只看该作者
同时也贴上链接
http://t.cn/zQAe2RR
地板
 楼主| 发表于 2013-7-10 13:51:28 | 只看该作者
另外,既然已经有了_Bool类型,为何还要增加bool类型
难道不是多此一举吗?{:soso_e134:}
5#
 楼主| 发表于 2013-7-11 15:52:38 | 只看该作者
rosynirvana 发表于 2013-7-10 13:46
1. _Bool是在C99中新增的类型,c99之前的编译器不支持
2. _Bool和bool在未赋值前并不是1,而是未指明的,这 ...

ahaC没有开C99,这从for(int a=0;a<99;a++)会报错这一点可看出,但是_Bool bl;却并未报错,这是为什么?{:soso_e132:}
_Bool与bool未赋值时值好像是127(好像是标准ASCII最后一位),因为“非0即真”,把它当做1似乎也没啥不对{:soso_e113:}
6#
发表于 2013-7-11 17:16:58 | 只看该作者
981013 发表于 2013-7-11 15:52
ahaC没有开C99,这从for(int a=0;a

gcc默认开gcc扩展,扩展允许使用某些非ansi c的特性

局部的_Bool和bool未赋值前是一个未指明的值,或者说是不确定的
比如这段代码
  1. #include <stdbool.h>
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     bool a[20];
  6.     _Bool b[20];
  7.     for(int i=0; i < 20; ++i)
  8.         printf("%d %d\n", a[i], b[i]);

  9.     return 0;
  10. }
复制代码
-Wall -std=c99编译
某次运行得到的结果是
0 1
0 0
0 0
0 1
0 0
0 0
0 1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0

接下来一次的运行结果是
0 0
0 1
0 0
0 0
0 0
0 1
0 0
0 1
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
1 0
1 0
7#
 楼主| 发表于 2013-7-12 14:51:47 | 只看该作者
但是我测试的结果不对啊!
是不是我代码写错了?{:soso_e132:}
[code=Cpp width=740px]#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
int main()
{ while(1)
{ bool bl;
printf("%d\n",bl);//应该是%d吧?
}

system("pause");
return 0;
}
[/code]
而且不同编译器结果也不同
啊哈C给我一大串127
Codepad则给我一串0
{:soso_e132:}
8#
发表于 2013-7-12 15:24:13 | 只看该作者
981013 发表于 2013-7-12 14:51
但是我测试的结果不对啊!
是不是我代码写错了?

应该用一个数组来测试,循环里面一个变量可能指向了内存中同样一个位置,所以相当于只试验了一个样本
还是我上面的代码(把for里面的i定义移出后),在codepad上面的测试结果

160 32
103 132
74 1
191 64
116 8
168 93
0 1
64 64
196 192
89 85
1 1
64 64
254 176
131 146
4 1
8 64
16 40
133 88
4 1
8 64
9#
发表于 2013-7-20 23:58:54 | 只看该作者
{:soso_e129:}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表