做以下事情会有多安全:
if (flag_val != NULL && strcmp (val, flag_val) == 0) {
// something
} else {
// something else
}
知道有时flag_val
将是NULL
,有时不会。
我知道它会首先检查flag_val != NULL
,如果评估为假,它不应该检查第二个条件吗?
由于
答案 0 :(得分:8)
正确,如果flag_val为NULL,那么&&操作员会短路。只要其他线程无法更改flag_val,这就是安全的代码。
答案 1 :(得分:1)
如果flag_val != NULL
的计算结果为false,即flag_val
为NULL
,则短路逻辑将停止对表达式其余部分的求值(因为整个条件不能为真) )。你做的很好。