while(1) 和 for(;;)有什么區(qū)別?
2、延時(shí)任務(wù)實(shí)現(xiàn)方案
作者 |?strongerHuang 微信公眾號(hào) |?嵌入式專(zhuān)
要回答這個(gè)問(wèn)題,其實(shí)你各自編寫(xiě)一段while(1) 和 for(;;)的代碼,編譯對(duì)比一下代碼大小和匯編文件,你就大概知道了。
while(1)和for(;;)語(yǔ)法表達(dá)
while( 表達(dá)式 ){語(yǔ)句}
其中:
表達(dá)式:是循環(huán)條件
語(yǔ)句:為循環(huán)體。

for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3){語(yǔ)句}
1.先求解表達(dá)式1
2.求解表達(dá)式2
若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第3)步;
若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。
3.求解表達(dá)式3
4.轉(zhuǎn)回上面第2)步繼續(xù)執(zhí)行。
5.循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。

while(1)和for(;;)異同點(diǎn)
驗(yàn)證while(1)和for(;;)差異
// filename: while.cint main(int argc, char const *argv[]){while(1){}return 0;}
// filename: for.cint main(int argc, char const *argv[]){for(;;){}return 0;}
gcc -S -o while.s while.cgcc -S -o for.s for.c
; filename: whiles.file "while.c".text.globl main.type main, @functionmain:.LFB0:.cfi_startprocpushq %rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq %rsp, %rbp.cfi_def_cfa_register 6movl %edi, -4(%rbp)movq %rsi, -16(%rbp).L2:jmp .L2.cfi_endproc.LFE0:.size main, .-main.ident "GCC: (GNU) 9.3.0".section .note.GNU-stack,"",@progbits
; filename: for.s.file "for.c".text.globl main.type main, @functionmain:.LFB0:.cfi_startprocpushq %rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq %rsp, %rbp.cfi_def_cfa_register 6movl %edi, -4(%rbp)movq %rsi, -16(%rbp).L2:jmp .L2.cfi_endproc.LFE0:.size main, .-main.ident "GCC: (GNU) 9.3.0".section .note.GNU-stack,"",@progbits
最近熱文閱讀:
1、使用MySQL,請(qǐng)用好 JSON 這張牌! 2、延時(shí)任務(wù)實(shí)現(xiàn)方案 3、服務(wù)端如何防止重復(fù)支付 4、五年工作經(jīng)驗(yàn)總結(jié) 16 條的代碼規(guī)范 5、為什么我勸你放棄了Restful API? 6、Java8 Stream:2萬(wàn)字20個(gè)實(shí)例,玩轉(zhuǎn)集合的篩選、歸約、分組、聚合 7、公司規(guī)定所有接口都用 POST請(qǐng)求,這是為什么? 8、為什么阿里強(qiáng)制 boolean 類(lèi)型變量不能使用 is 開(kāi)頭? 9、面試官:InnoDB中一棵B+樹(shù)可以存放多少行數(shù)據(jù)? 10、MyBatis批量插入幾千條數(shù)據(jù),請(qǐng)慎用foreach 關(guān)注公眾號(hào),你想要的Java都在這里
評(píng)論
圖片
表情
