问是否可以安全地认为右侧的&&和||运算符?
答可以。像
if(d != 0 && n / d > 0) { /* average is greater than 0 */ }和
if(p == NULL || *p == '\0') { /* no string */ }这样的习语在 C 语言中非常常见,并且依赖于所谓的“短路”行为。在第一个例子中,如果没有短路行为,当d等于 0 时,右侧将进行除以 0 的运算——并可能导致程序崩溃。在第二个例子中,当p为 NULL 指针时,右侧将尝试引用不存在的内存——并可能导致程序崩溃。
参考文献:ISO Sec. 6.3.13, Sec. 6.3.14
H&S Sec. 7.7 pp. 217-8