while 1 與for 的區別

2021-08-08 05:30:13 字數 783 閱讀 7363

在程式設計中,我們常常需要用到無限迴圈,常用的兩種方法是while (1) 和 for (;;)。這兩種方法效果完全一樣,但那一種更好呢?然我們看看它們編譯後的**:

編譯前:

while (1);

編譯後:

mov eax,1

test eax,eax

je foo+23h

jmp foo+18h

編譯前:

for (;;);

編譯後:

jmp foo+23h

顯然,for (;;)指令少,不占用暫存器,而且沒有判斷、跳轉,比while (1)好。這是因為以前的編譯器對這兩種無線迴圈的編譯處理不一致造成的。

三、 現代編譯器(gcc-4.1.1-52-e15)對這兩種無線迴圈的影響?

先看for.c

int main()

先看while.c

int main()

用gcc編譯

結果從彙編來看,for(;;)和while(1)的彙編**都是

4 : eb fe jmp 4

結論是:它們的彙編指令都是一樣的,所以效率也是一樣的

微控制器的程式設計中經常用到while(1)死迴圈來進行輪尋操作,但分析linux核心源**時卻經常見到for(;;)作為死迴圈的條件。

兩者區別:

區別一for(;;)死迴圈裡的兩個;;代表兩個空語句,編譯器一般會優化掉它們,直接進入迴圈體。

while(1)死迴圈裡的1被看成表示式,每迴圈一次都要判斷常量1是不是等於零。

while 1 和for 死迴圈對比

這是在c中的死迴圈方式 include intmain void return0 include intmain void return0 兩種迴圈在構造死迴圈時的區別 用while構造死迴圈時,一般會使用while true 來構造死迴圈 而用for來構造死迴圈時,則使用for 來構造死迴圈。這兩...

流程控制之While(1)

while 條件 迴圈體如果條件為真,那麼迴圈體則執行,執行完畢後再次迴圈,重新判斷條件。如果條件為假,那麼迴圈體不執行,迴圈終止 1.奇偶數案例 案例1 列印1 10 count 1 while count 10 print 數值 count count 1 案例2 列印1 10的偶數 count...

《C語言》while(1)的兩個作用

在學習 c語言實戰105例 的第十個例子 用一維陣列統計統計選票 時,發現程式上有 while 1 作用 會重複執行 中的 有時候是為了實現一種是否符合要求的排除判斷,如下例子 輸入候選者人數,若子啊1 100之間跳出迴圈進行後面的操作,若不在1 100之間說明輸入有誤,不跳出迴圈,而是執行清屏操作...