c++ - Mozilla C/C++ 编码风格

标签 c++ c if-statement boolean language-lawyer

今天我正在浏览 "Mozilla Coding Style Guideline"我发现了一个我不确定的点。

下面的语句是什么意思?

Do not compare x == true or x == false. Use (x) or (!x) instead. x == true, in fact, is different from if (x)!

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

最佳答案

评价x == true和/或 x == false取决于 true 的定义和 false ,这可能普遍相同。

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

C , 根据 C11标准,stdbool.h标题,章节 7.18 true的定义|和 false

true

which expands to the integer constant 1,

false

which expands to the integer constant 0

因此,在 x 的情况下有一个值 2

  • x == true将被评估为产生FALSE
  • (x)将产生 TRUE

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

关于c++ - Mozilla C/C++ 编码风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29229084/

相关文章:

c - 当我销毁我的链表时程序总是崩溃

c - strcmp 不适用于链表

java - 为什么最后的 else 语句没有在这里打印/执行?

java - 我怎样才能仅引用一个确实存在的对象?

c++ - boost 构建 : Use a feature or a variable

计算 C 中 char 数组的离散值

c++ - 你如何在 vi 中使用标记?

Javascript 缩短了 if 语句添加 else 语句

c++ - 在 C++ 中,您可以先构造子成员,然后在父构造函数中使用吗?

c++ - 在子语句的最外层 block 中重新声明的变量