使用
是否有任何不利之处typedef char bool;
enum boolean { false, true };
在C中提供语义布尔类型?
答案 0 :(得分:14)
在C99中,您应该使用stdbool.h
,其定义bool
,true
和false
。
否则你所拥有的就好了。仅使用枚举可能会更简单一些,但如果你真的想节省空间,你可以使用它。
答案 1 :(得分:6)
简短的回答是:没关系。如果你需要制作大型阵列,这是特别好的,虽然我很想使用C99内置的 1 。
因为你问“是否任何缺点...”我想我可以说有重要的机器实际上没有字符加载指令。 (Cray和初始的DEC Alpha会浮现在脑海中。)未来的机器可能会再次突然变得极小。
总是快速加载标准积分类型。
可能总是快速加载单个字符。
1。见C99 6.2.5。有一个内置类型_Bool
。然后,如果您包含<stdbool.h>
(请参阅C99 7.16),您将获得一个别名,名称更为优雅的bool
,并为true
和false
定义。如果你使用它会与你的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;