成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

while(1) 和 for(;;)有什么區(qū)別?

開發(fā) 后端
有讀者問題了類似這樣的問題:while(1) 和 for(;;)它們不都是無限循環(huán)嗎,作用應該一樣啊,它們到底有什么區(qū)別?來看一下吧。

 [[441014]]

有讀者問題了類似這樣的問題:while(1) 和 for(;;)它們不都是無限循環(huán)嗎,作用應該一樣啊,它們到底有什么區(qū)別?

要回答這個問題,其實你各自編寫一段while(1) 和 for(;;)的代碼,編譯對比一下代碼大小和匯編文件,你就大概知道了。

while(1)和for(;;)語法表達

這里先說一下while(1)和for(;;)語法表達式。

1.while語法表達 

  1. while( 表達式 )  
  2.  
  3.   語句  

其中:

  •  表達式:是循環(huán)條件
  •  語句:為循環(huán)體。

while語句的語義是:計算表達式的值,當值為真(非0)時, 執(zhí)行循環(huán)體語句。其執(zhí)行過程可用下圖表示:

 

2.for語法表達 

  1. for(表達式1; 表達式2; 表達式3)   
  2.  
  3.   語句  

它的執(zhí)行過程如下:

    1.先求解表達式1

    2.求解表達式2

    若其值為真(非0),則執(zhí)行for語句中指定的內嵌語句,然后執(zhí)行下面第3)步;

    若其值為假(0),則結束循環(huán),轉到第5)步。

    3.求解表達式3

    4.轉回上面第2)步繼續(xù)執(zhí)行。

    5.循環(huán)結束,執(zhí)行for語句下面的一個語句。

執(zhí)行過程可用下圖表示:

while(1)和for(;;)異同點

這里先說一下結論,然后再驗證驗證結論。

1.相同點

作用和效果都一樣:都是實現(xiàn)無限循環(huán)的功能。

2.不同點

while(1):其中括號里面是一個條件,程序會判斷真假。而括號里面的“1”永遠是一個“真值”。

其中,每一次循環(huán),編譯器都要判斷常量1是不是等于零。

for(;;):這兩個;;空語句,編譯器一般會優(yōu)化掉的,直接進入死循環(huán)。

根據(jù)上面的描述,你可能會覺得:while(1) 比 for(;;) 要做更多事,匯編代碼更多,代碼量也更大。

但事實是這樣嗎?下面驗證一下。

驗證while(1)和for(;;)差異

我們編寫分別兩個文件for.c和while.c,然后分別生成匯編代碼,看下情況。

1.源代碼

while.c: 

  1. // filename: while.c  
  2. int main(int argc, char const *argv[])  
  3.  
  4.     while(1) 
  5.     {}  
  6.     return 0;  

for.c: 

  1. // filename: for.c  
  2. int main(int argc, char const *argv[])  
  3.  
  4.     for(;;)  
  5.     {}  
  6.     return 0;  

2.生成匯編

我們這里使用gcc編譯器生成匯編,執(zhí)行命令如下: 

  1. gcc -S -o while.s while.c  
  2. gcc -S -o for.s for.c 

while匯編代碼: 

  1. ; filename: whiles  
  2.   .file  "while.c"  
  3.   .text  
  4.   .globl  main  
  5.   .type  main, @function  
  6. main:  
  7. .LFB0:  
  8.   .cfi_startproc  
  9.   pushq  %rbp  
  10.   .cfi_def_cfa_offset 16  
  11.   .cfi_offset 6, -16  
  12.   movq  %rsp, %rbp  
  13.   .cfi_def_cfa_register 6  
  14.   movl  %edi, -4(%rbp)  
  15.   movq  %rsi, -16(%rbp)  
  16. .L2:  
  17.   jmp  .L2  
  18.   .cfi_endproc  
  19. .LFE0:  
  20.   .size  main, .-main  
  21.   .ident  "GCC: (GNU) 9.3.0"  
  22.   .section  .note.GNU-stack,"",@progbits 

for匯編代碼: 

  1. ; filename: for.s  
  2.   .file  "for.c"  
  3.   .text  
  4.   .globl  main  
  5.   .type  main, @function  
  6. main:  
  7. .LFB0:  
  8.   .cfi_startproc  
  9.   pushq  %rbp  
  10.   .cfi_def_cfa_offset 16  
  11.   .cfi_offset 6, -16  
  12.   movq  %rsp, %rbp  
  13.   .cfi_def_cfa_register 6  
  14.   movl  %edi, -4(%rbp)  
  15.   movq  %rsi, -16(%rbp)  
  16. .L2:  
  17.   jmp  .L2  
  18.   .cfi_endproc  
  19. .LFE0:  
  20.   .size  main, .-main  
  21.   .ident  "GCC: (GNU) 9.3.0"  
  22.   .section  .note.GNU-stack,"",@progbits 

你會發(fā)現(xiàn),除了文件名不同,其余都相同。

當然,這里額外說一下,不同代碼、不同編譯器,以及不同優(yōu)化等級,可能最終結果有所差異。 

 

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2022-09-08 18:38:26

LinuxWindowsmacOS

2022-09-07 18:32:57

并發(fā)編程線程

2020-03-09 20:56:19

LoRaLoRaWAN無線技術

2020-11-09 14:07:53

PyQtQt編程

2022-06-06 14:53:02

LoRaLoRaWAN

2021-05-16 14:26:08

RPAIPACIO

2024-05-27 00:40:00

2024-03-05 18:59:59

前端開發(fā)localhost

2022-02-27 15:33:22

安全CASBSASE

2024-09-09 13:10:14

2022-08-02 08:23:37

SessionCookies

2021-05-31 15:53:30

Cat-M1NB-IoT物聯(lián)網(wǎng)

2023-12-15 09:21:17

ObjectJavaString

2022-08-22 07:06:32

MyBatisSQL占位符

2022-08-31 08:33:54

Bash操作系統(tǒng)Linux

2025-03-10 09:30:00

SpringJava開發(fā)

2022-01-16 07:46:53

SpringDataASSM

2022-08-03 07:04:56

GETHTTPPOST

2021-03-27 10:56:17

promisethenfinally

2020-09-08 11:00:00

IaaSPaaSSaaS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99riav3国产精品视频 | 亚洲视频一区二区三区 | 国产精品1区 | 国产免费拔擦拔擦8x高清 | 亚洲一区 | 亚洲色图综合网 | 91看片在线 | 日韩在线精品 | 久久久久国产一区二区三区四区 | 亚洲毛片在线 | 亚洲成网站 | 国产一区三区在线 | 久久一二 | 国产精品免费在线 | 国产精品久久久久久网站 | 91看片官网 | 国产精品福利视频 | 国产精品久久久久久久久久久久 | 性高湖久久久久久久久 | 国产精品日女人 | 国产亚洲精品精品国产亚洲综合 | 日韩中文字幕在线观看视频 | 国产91综合一区在线观看 | 国产日韩欧美综合 | 麻豆久久久久 | 久久综合狠狠综合久久综合88 | 国产免费一区二区 | 四虎海外 | 亚洲一区二区三区四区五区中文 | cao在线 | 久久免费精品 | 国产精品一区网站 | 国产精品一区二区三区在线 | 日韩欧美网 | 亚洲免费精品 | 欧美精三区欧美精三区 | 成人免费视频网站在线观看 | 成人日韩 | 欧美精品一区二区三区四区 在线 | 国产一区二区三区色淫影院 | 综合久久av |