在C中模拟布尔值可以这样做:
int success;
success = (errors == 0 && count > 0);
if(success)
...
Run Code Online (Sandbox Code Playgroud)
随着stdbool.h包括以下可以做:
bool success;
success = (errors == 0 && count > 0) ? true : false;
if(success)
...
Run Code Online (Sandbox Code Playgroud)
根据我的理解,逻辑和比较运算符应返回1或0.此外,stdbool.h应定义常量以便true == 1和false == 0.
因此,以下应该工作:
bool success;
success = (errors == 0 && count > 0);
if(success)
...
Run Code Online (Sandbox Code Playgroud)
它确实适用于我测试过的编译器.但是假设它是可移植代码是否安全?(假设stdbool.h存在)
因为bool是内部类型,C++编译器的情况是否不同?
dre*_*lax 14
可以安全地假设.在C99中,转换为_Bool类型后,所有非零值都将转换为1.这将在C99标准的6.3.1.2节中描述.相等和关系运算符(例如==,>=等)也保证导致1或0.这将在6.5.8和6.5.9节中描述.
对于C++,bool类型是一个真正的布尔类型,其中值被转换为true或者false不是1或0,但是将==操作的结果等分配给a bool并期望它可以工作仍然是安全的,因为关系和比较运算符bool反正导致了.当true转换为整数类型时,它将转换为1.