C 哪个更安全&引用==“真的”;或者说假;
将布尔型变量与以下变量进行比较是否更好:C 哪个更安全&引用==“真的”;或者说假;,c,boolean,C,Boolean,将布尔型变量与以下变量进行比较是否更好: ==FALSE和!=错误;或 ==TRUE和!=是否正确 每个语法都有自己的含义,没有更好或更安全的方法。但是,你应该总是考虑这些特殊的点来比较哪种语法在你的情况下更安全: 在C语言中,数字表示布尔值:0是假,其他数字是真。您可以限制为stdbool.h,以防止整数和布尔值混淆 如果使用C连接到SQL数据库,在SQL中,与NULL的比较不是true也不是false 如果您在团队中工作,我建议所有团队成员使用If(something==TRUE)而不是If
==FALSE
和!=错误
;或==TRUE
和!=是否正确
每个语法都有自己的含义,没有更好或更安全的方法。但是,你应该总是考虑这些特殊的点来比较哪种语法在你的情况下更安全:
stdbool.h
,以防止整数和布尔值混淆If(something==TRUE)
而不是If(something)
,因为这表明您指的是布尔fromsomething
而不是整数。请确保您的temameates同意此语法,并确保您已考虑案例1李>
比较布尔类型变量与“==FALSE”和“!=FALSE”或“==FALSE”和“==TRUE”是否更好
=
或=代码>评估真实性。
如果仍然强烈希望使用==
,=代码>,就像许多样式问题一样,最好遵循团队的编码准则
缺少团队的编码指导原则-制定它们
使用
可以访问bool,true,false
,而不是codetrue
,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!=0
或a!=错误
往往更安全
风格:我发现==
代码比更容易理解=代码>因为否定增加了人们的心理复杂性
TRUE
和FALSE
不是标准的C语言,因此不应使用,除非您是针对使用它们的旧C90库(如Windows API)进行编码
- C中的布尔类型是
\u Bool
。它可以用作bool
,并且应该从stdbool.h
- 需要显式地将布尔值与真/假值进行比较,这表明变量命名很差。布尔值的一个常见命名标准是在它们前面加上
is
,例如:while(!isReady){…}
==
和=代码>操作符同样安全。理论上,两者都可能与=
和=>混淆代码>,但任何合适的编译器都会为此发出警告(“表达式中的赋值”/“可能不正确的赋值”)
如果您有一个布尔变量b
,我的意见是If(b)
和If(!b)
更可取。如果必须使用显式比较,If(b!=FALSE)
和If(b==FALSE)
更可取。与TRUE
进行显式比较可能非常危险,因为b
既不是0也不是1。另请参见中的。使用stdbool.h
中的true
和false
更安全,请不要这样做!使用x=FALSE;if(x){…}
或if(!x){
。为什么还要使用比较?比较返回布尔值(作为int
)或者您是否将FALSE
定义为-1
和TRUE
定义为42
?除非TRUE
被定义为非1和FALSE
非0,否则最好不要进行显式比较。只需使用if(b)
和if(!b)
。“其他正数是真的”是不完整的。除+/-0以外的所有数字都是真的,包括大于0、小于0、甚至是一个更为相关的引用源,而不是其他各种用户,将是MISRA-C,它强制逻辑/关系/相等操作符被视为布尔函数。C++中也一样。
if(islower('a') == TRUTH) ... // The if() block might or might not execute
if(islower('a')) ... // The if() block will execute