2015-03-30 83 views
-3

爲什麼這兩個語句不相等?IF語句中沒有分號

如果我== 3然後fork()被執行。

如果我!= 3那麼fork()不會被執行。

這是怎麼回事?這是否是某種編譯器優化故障?

if((i==3) && (fork()==0)) 
if((fork()==0) && (i==3)) 
+0

我的猜測是,一旦第一個值是假的,它不需要檢查下一個。我不是C程序員。 – Bob 2015-03-30 17:49:14

回答

0

這是合乎邏輯的&&運營商進行短路評價的直接結果是:如果i != 3if聲明知道,表達式的結果將是false,並停止在那裏。

這就是爲什麼它不能執行fork。如果你不想要這種行爲,你可以使用按位AND運算符&

但是,您的代碼的邏輯仍然值得懷疑,因爲在i != 3時,您不可能知道您登陸的「叉子」的哪一側。

如果你想要做一個fork不管什麼i值,但適當地獲得了「叉」的一面,做叉前期,並檢查if裏面的結果:

pid_t side = fork(); 
if (i == 3) { 
    if (side == 0) { 
     ... 
    } else { 
     ... 
    } 
} else { 
    if (side == 0) { 
     ... 
    } else { 
     ... 
    } 
} 
1

這叫做short-circuit evaluation。如果第一項是錯誤的,你知道整個&&將是錯誤的,所以很多語言故意跳過第二次評估。

0

C的& &運算符的右側在左側不正確時不會執行。