[英]execution order of loops in C
這可能是一個非常noob的問題,但我的結果是:
int someVariable = 1;
while (callFunction(someVariable));
if (someVariable = 1) {
printf("a1");
} else {
printf("a2");
}
callFunction (int i) {
while (i< 100000000) {
i++;
}
return 0;
}
所以當你點擊while循環時
while (callFunction(someVariable));
一個線程在該循環中等待,直到它完成然后再到
if(someVariable == 1) {
printf("a1");
} else {
printf("a2");
}
或者它是否跳過並移動到if條件,打印“a2”然后在循環完成后再次通過if條件?
更新:這不是有效的c代碼只是假的,也許我沒有說得對,基本上我想弄清楚的是循環之間的不同之處while (callFunction(someVariable));
是vs
while (callFunction(someVariable)){}
我也改變了我的代碼中的粗體部分,即** int someVariable = 1; **,我正在做一個無休止的循環,這不是我的意圖。
函數內部的代碼由單個線程順序執行。 即使你向你的函數發送了另一個線程,它也會連續執行它。
現在99%的編程語言都是如此。
UPDATE
基本上我想弄清楚的是循環之間的區別是什么
while (callFunction(someVariable));
是vswhile (callFunction(someVariable)){}
沒有實際差別。 ;
分隔一個空語句, {
}
是一個沒有語句的范圍。 任何編譯器都可以生成相同的代碼。
當然,如果你想在循環的每次迭代中做一些事情, {
}
創建一個“范圍”,你可以在其中創建類型,typedef和變量以及調用函數:在達到'}'或有未捕獲的異常時,本地內容被清理 - 調用析構函數,任何標識符/符號都被遺忘,因為編譯器繼續....
原始答案
這個...
callFunction(int i){
while (i< 100000000){
i++;
}
return 1;
}
...只是浪費了大量的CPU時間,如果編譯器的優化器沒有刪除循環,因為它沒有外部可見的工作 - 即循環沒有任何其他狀態的副作用那個“我”和那個是無關緊要的,因為函數在不使用i的情況下返回。 如果總是返回“1”,這意味着調用代碼......
while (callFunction(someVariable));
......相當於......
while (1)
;
...它只是永遠循環。
因此,該程序的其余部分-在此之后while
循環-永遠不會執行。
很難猜出你真正想要做什么。
為了更好地編程自己 - 理解代碼的行為 - 你應該做以下一個或兩個:
您的代碼在任何輸出之前包含無限循環:
while (callFunction(someVariable));
你的意思是;
在那里(一個空循環),或者你的意思是別的嗎? 並不重要: callFunction
總是返回1
,轉換為true
。 (如果你真的希望循環為空,至少將;
放在可以看到它的單獨一行上。)
如果你獲得超越while
(因為你的地方修改一些代碼)時, if
包含嵌入的分配; 它基本上與以下相同:
if ( (someVariable = 1) != 0 )
當然,這總是正確的。 (大多數C ++編譯器應警告嵌入式賦值或if
總是求值為true的事實。或者兩者兼而有之。)
如果你的循環完成(順序是肯定的,如果你修復它),它將打印'a1',因為你在if中做了一個賦值,它總是返回1,對於條件值,它的計算結果為'true'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.