在C中模拟布尔值可以这样做:
int success; success = (errors == 0 && count > 0); if(success) ...
使用stdbool.h可以完成以下操作:
bool success; success = (errors == 0 && count > 0) ? true : false; if(success) ...
据我所知,逻辑和比较运算符应返回1或0.
此外,应定义stdbool.h常量,以便true == 1和false == 0.
因此,以下应该工作:
bool success; success = (errors == 0 && count > 0); if(success) ...
它确实适用于我测试过的编译器.但是假设它是可移植代码是否安全? (假设存在stdbool.h)
由于bool是内部类型,C编译器的情况是否不同?
解决方法
可以安全地假设.在C99中,转换为_Bool类型后,所有非零值都将转换为1.这将在C99标准的6.3.1.2节中介绍.等式和关系运算符(例如==,> =等)保证也会产生1或0.这将在6.5.8和6.5.9节中描述.
对于C,bool类型是一个真正的布尔类型,其中值被转换为true或false而不是1或0,但是仍然可以安全地将==操作等的结果分配给bool并期望它工作,因为关系运算符和比较运算符无论如何都会导致bool.当true转换为整数类型时,它将转换为1.