在C练习中使用char作为bool?

时间:2010-10-04 03:56:35

标签: c boolean

使用

是否有任何不利之处
typedef char bool;
enum boolean { false, true };
在C中

提供语义布尔类型?

5 个答案:

答案 0 :(得分:14)

在C99中,您应该使用stdbool.h,其定义booltruefalse

否则你所拥有的就好了。仅使用枚举可能会更简单一些,但如果你真的想节省空间,你可以使用它。

答案 1 :(得分:6)

简短的回答是:没关系。如果你需要制作大型阵列,这是特别好的,虽然我很想使用C99内置的 1

因为你问“是否任何缺点...”我想我可以说有重要的机器实际上没有字符加载指令。 (Cray和初始的DEC Alpha会浮现在脑海中。)未来的机器可能会再次突然变得极小。

总是快速加载标准积分类型。

可能总是快速加载单个字符。


1。见C99 6.2.5。有一个内置类型_Bool。然后,如果您包含<stdbool.h>(请参阅C99 7.16),您将获得一个别名,名称更为优雅的bool,并为truefalse定义。如果你使用它会与你的typedef发生冲突,但我确信这很容易解决。

答案 2 :(得分:4)

typedef char bool;的缺点是,如果使用C99实现进行编译并且恰好包含<stdbool.h>,则最终为typedef char _Bool;,这是错误的。另外,如果您曾尝试将代码编译为C ++,那么您就会遇到问题(这不一定是问题,但可能会出现问题)。

如果您的实现提供了一个名称,或者为该类型使用不同的名称,则最好使用<stdbool.h>

答案 3 :(得分:1)

我认为它很好,很干净。

答案 4 :(得分:0)

我建议使用一点来表示真或假,而不是字符。一个字符使用8位,我们可以将1设置为true,将0设置为false,仅使用1位。这将是更高的内存效率,也满足了目的。 (例如)char flag:1;

参考:http://en.wikipedia.org/wiki/Bit_field