Dar*_*usz 1 c if-statement operator-precedence
(这个问题是Is复合的精确副本,如果检查null,然后C++中的其他条件总是安全的?但是关于C,而不是C++.有人指出问题应该更具体).
我一直在使用以下类型的if条件.
char* ptr = ...;
if (ptr != NULL && ptr[0] != '\0') // <=== is this always safe?
{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
它依赖于ptr != NULL之前的检查ptr[0] !='\0'.
在所有标准,编译器和架构下都安全吗?或者是否有可能ptr[0] != '\0'在之前进行检查ptr != NULL?
use*_*733 11
是的,这是安全的.
C标准说(N1570 - 6.5.13逻辑AND运算符):
与按位二进制和运算符不同,&&运算符保证从左到右的评估; 如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点.如果第一个操作数比较等于0,则不计算第二个操作数.