邏輯運算子的短路行為
短路是一種在能夠時跳過評估(if / while / …)條件的部分的功能。如果對兩個運算元進行邏輯運算,則計算第一個運算元(為真或假),如果有判定(即使用&&時第一個運算元為 false,則在使用||時第一個運算元為 true)第二個運算元為沒有評估。
例:
#include <stdio.h>
int main(void) {
int a = 20;
int b = -5;
/* here 'b == -5' is not evaluated,
since a 'a != 20' is false. */
if (a != 20 && b == -5) {
printf("I won't be printed!\n");
}
return 0;
}
自己檢查一下:
#include <stdio.h>
int print(int i) {
printf("print function %d\n", i);
return i;
}
int main(void) {
int a = 20;
/* here 'print(a)' is not called,
since a 'a != 20' is false. */
if (a != 20 && print(a)) {
printf("I won't be printed!\n");
}
/* here 'print(a)' is called,
since a 'a == 20' is true. */
if (a == 20 && print(a)) {
printf("I will be printed!\n");
}
return 0;
}
輸出:
$ ./a.out
print function 20
I will be printed!
當你想要避免評估(計算上)昂貴的術語時,短路很重要。此外,它會嚴重影響程式的流程,就像在這種情況下: 為什麼這個程式列印“分叉!” 4 次?