2012-12-11 125 views
-3

if(fork()=0)if(fork()==0)有什麼區別?
當它返回0時,它是孩子,但如果它的== 0呢?使用分叉= 0和分叉== 0時有什麼區別?

+12

我非常擔心你與'打叉()'不知道'='和''==(它可能只是我內心的系統管理員的尖叫) –

+4

你有沒有試過這種區別?第一個不應該編譯,因爲任務的目標不是左值... – effeffe

+1

這就是BASIC程序員如何編寫C代碼的方法。 – 2012-12-11 21:11:57

回答

3

在第一種情況下,if從不輸入。在第二種情況下,如果fork的結果在當前正在執行的代碼處於「子」過程中,則輸入if

+1

爲此,=是賦值運算符,==是相等運算符。無論fork()是否執行,賦值都將返回true,但檢查fork()返回值(使用==)的相等性是否會正確檢查。 –

+0

@Toby勞倫斯好,沒有。 「任務將返回true」 - 除非您將LHS賦值爲0。 – 2012-12-11 21:12:48

+0

@Toby:賦值返回本身右側的任何東西。在這種情況下,即'0',可以隱式轉換爲'false',而不是'true'。 –

1

=爲變量賦值,==檢查是否相等。

2
fork() = 0 

是分配

fork() == 0 

測試平等

+0

平等,而不是等同:) – Chad

+1

我會說平等而不是等值。等價通常意味着STL土地中的「!(a

7

=是賦值運算符和==是相等的比較操作。當您使用fork() = 0時,您應該收到編譯警告或錯誤。

+4

+1關於編譯警告/錯誤。 –

+0

'fun(){ printf(「A」); fork(); printf(「B」); if(fork()!= 0)printf(「C」); fork(); printf(「D」); } printf(「E」); }' –

+2

@jay:這個例子與你的問題中的兩者中的任何一個都不匹配。 '!='不是'='或'=='。http://ideone.com/ZploBs –

0

在第一種情況下,如果(fork()= 0)是賦值並且它始終爲真。這種情況從不假。
而(fork()== 0)檢查條件fork()的值是否等於0。

+0

不,分配不總是爲真,它返回分配的值;實際上,'x = 0'總是評估爲'false'。 – effeffe

相關問題