簡體   English   中英

C中循環的執行順序

[英]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)); 是vs while (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM