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

使用是否有任何缺点

typedef char bool; enum boolean { false, true }; 

在C中提供语义布尔类型?

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

否则你有什么好。 仅使用枚举可能会稍微简单一点,但如果你真的想节省空间你所拥有的工作。

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

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

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

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


1.见C99 6.2.5。 有一个内置类型_Bool 然后,如果你包含 (参见C99 7.16),你会得到一个别名,更优雅的命名bool ,并定义为truefalse 如果你使用它会与你的typedef冲突,但我相信这很容易修复。

typedef char bool;的缺点typedef char bool; 如果您使用C99实现进行编译并碰巧包含 ,则最终为typedef char _Bool; 这是错的。 此外,如果您曾尝试将代码编译为C ++,那么您就会遇到问题(这不一定是问题,但也可能存在问题)。

如果您的实现提供了一个或者为类型使用不同的名称(如BOOL ,那么使用可能会更好。

我觉得它很好,干净整洁。

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

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