if pid1 fork 0 和if pid1 fork 0 有什麼區別嗎?

2025-06-17 12:15:06 字數 1738 閱讀 6929

1樓:張海珅

c語言中的運算子是有優先順序的。

賦值運算子「=」的級別最低。

fork()函式的返回值有三種情形:

負數:如果出錯,帆液則fork()返回-1,此時沒模答有建立新的程序。最初的程序仍然執行。

零:在子程序中,fork()返回0

正數:在負程序中,fork()返回正的子程序的pid

if((pid1=fork())0)的意思是:執行fork()建立程序,並把返回值賦給pid1;

1)如果fork()返回負數,也就是建立程序失敗,則表示式((pid1=fork())0)為真,pid = 1,從而會執行後面的語句;

2)如果返回值為正數或者0,也就是程序建立成功,pid1 >=0,則不執行後邊的語句。

if(pid1=fork()<0)的意思是:執行fork()建立程序,把邏輯表示式fork()<0的值賦給pid1,1)如果它的返回值為負數,也就是建立程序失敗,則表示式(pid1=fork()<0)為真,pid1 = 1,從而會執行後面的語句;(態碼物在if語句中,應該不會直接用pid1作處理的,但else語句中,一般會對pid1進行判斷,子程序和父程序分別進行不同的操作,但pid1已經不表示子程序號,從而出錯。)

2)如果fork()返回值為正數或者0,那麼表示式為假,pid1 = 0,從而不會執行後邊的語句。(此時,情況同上面講的else分支的情況,即從邏輯上看認為已經建立子程序成功了,而pid1卻不是表示子程序號,而是0,從而**出現錯誤)

從上面的分析可以看出:

1)fork()執行成功,則無論是子程序還是父程序都會執行if後面的語句;如果fork()執行失敗,則原有程序都不會執行if後面的語句。所以,從邏輯分支的選擇上看,二者是等效的。

2)但pid1 的賦值不同。如果if後面的語句或者else後面的語句中,涉及到對pid1的處理,那麼,處理結果大相徑庭,就不難理解了啊。

2樓:月夕愛花晨

if((pid1=fork())0)和if(pid1=fork()<0)有區別。雖然從邏輯分支上來說,二者是等效的,但運算順序是不一樣的。

c語言中運算優先順序具體如下:

<>同一優先順序的運算子,運算次序由結合方向所決定。

簡單記就是:! 算術運算子 > 關係運算子 > 賦值運算子。

在乙個表示式中可能包含多個有不同運算子連線起來的、具有不同資料型別的資料物件;由於表示式有多種運算,不同的運算順序可能得出不同結果甚至出現錯誤運算錯誤,因為當表示式中含多種運算時,必須按一定順序進行結合,才能保證運算的合理性和結果的正確性、唯一性。

優先順序從上到下依次遞減,最上面具有最高的優先順序,逗號操作符具有最低的優先順序。表達辯旦式的結合次序取決於表示式中各喚鋒種運算子的優先順序。優先順序高的運算子先結合,優先順序低的運算子後結合,同一行中的運算子的優先順序相同攜鏈擾。

fork函式main() { int i,pid; for(i=1;i<4;i++) if(pid=fork()); break; }

3樓:網友

1.首先,明確幾點:第一,如果沒有 if(pid=fork())break;for迴圈會執行3次;第二,fork()函式會返回兩個值,乙個大於0的值(子程序的程序號),乙個是0;第三,break跳出迴圈的話,一次都不會做;

2.解釋流程實質:if中條件判斷的時候,fork函式返回的兩個值有乙個是永遠不成立的,所以:

fork每次執行時,父程序的pid>0,跳出迴圈(不生孩子了),而子程序的pid=0,成為下一次迴圈的父程序(繼續生孩子);

板材e0和e1的區別是什麼,E0和E1 板材的區別

因為現在社會不斷的在發展,環境也是不斷地在破壞,所以大家對於環保的意識也是在不斷的增強,對於家裝的板材要求也是越來越高,我們在購買板材的時候,經常會看到一些級別的標識,下面我們來跟大家分享一下環保板材eo e1是什麼意思?e1級高密度環保板材和e0的有啥區別?一起說說吧。環保板材eoe1是什麼意思 ...

特殊暫存器中TMOD 0xo1和TMOD 0xdf為什麼這樣賦值,0xdf那來的,誰和誰「或」

特殊暫存器中tmod 0xo1 其實就是 tmod tmod 0x01的簡寫,目的是回把tmod最低位置答1,不影響其他位。tmod 0xdf 同理是tmod tmod 0xdf 的簡寫0xdf就是11011111 目的是為了把第五位清零而不影響其它位。51微控制器中設定定時器模式時,tmod 0x...

0和任何數相乘都得0,任何數乘1都得原數判

0乘任何數都得0,因此,0和任何數相乘都得任何數.這種說法是錯誤的.故答案為 錯誤.由分析知 任何數和0相乘都得0,任何數和1相乘都得原數,說法正確 故答案為 正確.0和任何數相乘都得0,任何數乘1都得原數.對 錯.判斷對錯 由分析知 任何數和0相乘都得0,任何數和1相乘都得原數,說法正確 故答案為...