爲什麼這兩個語句不相等?IF語句中沒有分號
如果我== 3然後fork()被執行。
如果我!= 3那麼fork()不會被執行。
這是怎麼回事?這是否是某種編譯器優化故障?
if((i==3) && (fork()==0))
if((fork()==0) && (i==3))
爲什麼這兩個語句不相等?IF語句中沒有分號
如果我== 3然後fork()被執行。
如果我!= 3那麼fork()不會被執行。
這是怎麼回事?這是否是某種編譯器優化故障?
if((i==3) && (fork()==0))
if((fork()==0) && (i==3))
這是合乎邏輯的&&
運營商進行短路評價的直接結果是:如果i != 3
,if
聲明知道,表達式的結果將是false
,並停止在那裏。
這就是爲什麼它不能執行fork
。如果你不想要這種行爲,你可以使用按位AND運算符&
。
但是,您的代碼的邏輯仍然值得懷疑,因爲在i != 3
時,您不可能知道您登陸的「叉子」的哪一側。
如果你想要做一個fork
不管什麼i
值,但適當地獲得了「叉」的一面,做叉前期,並檢查if
裏面的結果:
pid_t side = fork();
if (i == 3) {
if (side == 0) {
...
} else {
...
}
} else {
if (side == 0) {
...
} else {
...
}
}
這叫做short-circuit evaluation。如果第一項是錯誤的,你知道整個&&
將是錯誤的,所以很多語言故意跳過第二次評估。
C的& &運算符的右側在左側不正確時不會執行。
我的猜測是,一旦第一個值是假的,它不需要檢查下一個。我不是C程序員。 – Bob 2015-03-30 17:49:14