考慮一下:邏輯比較操作符,而不控制語句
main()
{
int i = 1;
fork(); fork(); fork();
printf("%d ",i);
}
上述代碼的輸出是:
1 1 1 1 1 1 1 1
即,在端部有8個(2^3)處理達到printf()
一行。現在考慮下面的代碼:
main()
{
int i = 1;
fork() && fork() || fork();
printf("%d ",i);
}
起初,我以爲是因爲使用&&
比較的結果會出現在輸出沒有變化,||
都沒有被控制語句評價像if
或while
。也就是說,他們正在被拋棄。然而,這種代碼的輸出是:
1 1 1 1 1
含義,在末端有5個流程,到達printf()
線。
我的問題:這是什麼線做
fork() && fork()||fork();
當然,事情發生了變化。我從來沒有考慮過使用像&&
,||
這樣的比較運算符,而沒有像if
,while
這樣的控制語句來評估比較結果並相應地採取一些措施。我認爲,沒有這些控制結構,比較運算符就沒有意義;他們只是簡單地返回1
或0
而沒有做任何事情。
顯然,我錯了,而且完全沒有意識到操作員的這種用法。
也許編寫合理的代碼將是一個好開始 –
@EdHeal這是一個謎題。 –
我不明白這是如何重複的。問題不在於fork()。事實證明,這是關於所謂的「操作員短路」。一個從未聽過這個詞的人不能看這個(這是這種情況,這次) –