This question already has answers here:
Closed 5 years ago.
Is short-circuiting logical operators mandated? And evaluation order?
(7个答案)
(这个问题是AA>的确切副本,但关于C,而不是C++)。有人指出,这个问题应该更加具体)。
我已经使用以下类型的if条件很多时间了。
char* ptr = ...;
if (ptr != NULL && ptr[0] != '\0') // <=== is this always safe?
{ /* ... */ }

它依赖于在ptr != NULL之前检查ptr[0] !='\0'
在所有标准、编译器和体系结构下都安全吗?或者是否有可能在ptr[0] != '\0'之前检查ptr != NULL

最佳答案

是的,很安全。
C标准规定(N1570-6.5.13逻辑和运算符):
与按位二进制运算符不同,&&运算符保证从左到右求值;
如果对第二个操作数求值,则
第一个和第二个操作数如果第一个操作数比较等于0,则第二个操作数
未计算操作数。

关于c - 如果在C中先检查null然后再检查其他条件,是否复合始终安全? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21776657/

10-11 23:03
查看更多