Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
执行以下操作有多安全:
if (flag_val != NULL && strcmp (val, flag_val) == 0) { // something } else { // something else }
知道有时flag_val会NULL,有时不会。
flag_val
NULL
我知道它会首先检查 if flag_val != NULL,如果它评估为假,它不应该检查第二个条件,对吗?
flag_val != NULL
谢谢
正确,如果 flag_val 为 NULL,则 && 运算符将短路。只要 flag_val 不能被其他线程更改,这是安全代码。
如果flag_val != NULL计算结果为假,即 is flag_val,NULL则短路逻辑将停止对表达式其余部分的计算(因为整个条件不可能为真)。你在做什么很好。