哪个更安全使用? “ == TRUE”或“!= FALSE”

时间:2018-10-26 18:50:12

标签: c boolean

将布尔类型变量与以下内容进行比较是否更好?

  1. == FALSE!= FALSE;或
  2. == TRUE!= TRUE

3 个答案:

答案 0 :(得分:5)

  

将布尔类型变量与“ == FALSE”和“!= FALSE”或与“ == FALSE”和“ == TRUE”进行比较是否更好?

  1. 都不是。

对于C布尔类型_Bool,请不要使用==!=来评估真实性。
@Steve Summit @Antti Haapala @John Bode

_Bool x;
if (x)   // to assess truth-ness
if (!x)   // to assess false-ness
  1. 如果仍然强烈希望使用==!=,就像许多样式问题一样,最好遵循小组的编码准则。

  2. 缺少小组的编码准则-制定准则。


使用<stdbool.h>来访问bool, true, false,而不要使用代码TRUEFALSE
@Eugene Sh.


  

哪个更安全使用? “ == TRUE”或“!= FALSE”

请注意,比较a == TRUE可能会意外失败,因为操作数是作为整数,FP或指针而不是布尔进行比较的。即使a是布尔值1,TRUE是非布尔值且“真”值不是1的非真实性,这也可能无法进行比较。

double a = 0.999999;
// Both are false
if (a == TRUE) { ... }   // The arithmetic value of `a` is used, not its "truth"
if (a == FALSE) { ... }
// better as 
if (a) { ... }   // As if `a != 0`
else { ... }

考虑“真相”返回非零(也许不是1)的情况。

if(islower('a') == TRUTH) ...  // The if() block might or might not execute
if(islower('a'))  ...          // The if() block will execute

a != 0a != false往往更安全。


样式:我发现==代码比!=更易于遵循,因为否定会增加人们的思维复杂度。 Example

答案 1 :(得分:1)

  • .front_mn_item:hover { background-color:#fff !important; } .front_mn_item:hover a { color:#111 !important; background-color:#fff !important; } TRUE不是标准C,因此不应使用它们,除非您可能正在针对使用它们的旧C90库(例如Windows API)进行编码。
  • C中的布尔类型为FALSE。它可以用作_Bool,应设置为bool中的值truefalse
  • 需要将布尔值与true / false进行显式比较,这表明变量命名不正确。布尔值的一种通用命名标准是给它们加上stdbool.h前缀,例如:is
  • while(!isReady) { ... }==运算符同样安全。理论上,两者都可以与!==混合使用,但是任何体面的编译器都会对此发出警告(“表达式中的赋值” /“可能的不正确赋值”)。

答案 2 :(得分:-1)

Everey语法具有其自身的含义,没有更好或更安全的方法。但是您应该始终将这些特殊之处进行比较,以决定哪种语法在您的情况下更安全:

  1. 使用C语言的NUMBERS表示布尔值:0为 FALSE ,其他数字为 TRUE 。您可以限制为stdbool.h,以防止整数和布尔值混淆。
  2. 如果您使用 C 连接到SQL数据库,则在SQL中,与 NULL 的比较既不是 true 也不是 false
  3. 如果在团队中工作,我建议所有团队成员使用if (something==TRUE)而不是if(something),因为这表示您是指something中的布尔值而不是整数。确保您的temateates同意此语法,并确保您已考虑案例1!