Mozilla C/C++编码风格

Rav*_*iny 3 c c++ if-statement boolean language-lawyer

今天我正在阅读"Mozilla Coding Style Guideline",我发现了一个我不确定的观点.

以下陈述对他们意味着什么?

不要比较x == truex == false.使用(x)(!x)代替.x == true,其实不同于if (x)!

我不确定这两种方法有何不同.请澄清.

Sou*_*osh 10

的评价x == true和/或x == false依赖于的定义truefalse,其可以具有普遍的相同.

(x)并且(!x)仅基于值进行评估,x并且不依赖于任何平台/实现/标准特定定义.例如,(x)将评估在具有非零值的情况下产生TRUE结果.x

C,按照C11标准,stdbool.h标题,章节7.18的定义truefalse

真正

它扩展为整数常量1,

它扩展为整数常量0

所以,如果x有价值2

  • x == true将被评估为产生FALSE.
  • (x)将产生真实.

因此,为了生成健壮的代码并保持可移植性,最好使用后面的方法.