精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

奈因PCB電路板設計 ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-08-11 10:34 ? 次閱讀

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

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

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

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

1.while語法表達

while( 表達式 ){ 語句}

其中:

表達式:是循環條件

語句:為循環體。

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

2.for語法表達

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

它的執行過程如下:

1.先求解表達式1

2.求解表達式2

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

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

3.求解表達式3

4.轉回上面第2)步繼續執行。

5.循環結束,執行for語句下面的一個語句。

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

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

1.相同點作用和效果都一樣:都是實現無限循環的功能。

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

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

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

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

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

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

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

1.源代碼while.c:

// filename: while.cint main(int argc, char const *argv[]){ while(1) {}

return 0;}

for.c:

// filename: for.cint main(int argc, char const *argv[]){ for(;;) {}

return 0;}

2.生成匯編我們這里使用gcc編譯器生成匯編,執行命令如下:

gcc -S -o while.s while.cgcc -S -o for.s for.c

while匯編代碼:

; filename: whiles .file “while.c” .text .globl main .type main, @functionmain:.LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl %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

for匯編代碼:

; filename: for.s .file “for.c” .text .globl main .type main, @functionmain:.LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl %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

你會發現,除了文件名不同,其余都相同。

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

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136186
  • 編程
    +關注

    關注

    88

    文章

    3592

    瀏覽量

    93594
  • 代碼
    +關注

    關注

    30

    文章

    4747

    瀏覽量

    68349

原文標題:while(1) 和 for ( ; ; )有什么區別?

文章出處:【微信號:pcbgood,微信公眾號:奈因PCB電路板設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FCCSP與FCBGA都是倒裝有什么區別

    本文簡單介紹了倒裝芯片球柵陣列封裝與倒裝芯片級封裝的概念與區別。 FCCSP與FCBGA都是倒裝,怎么區分?什么區別
    的頭像 發表于 11-16 11:48 ?579次閱讀
    FCCSP與FCBGA都是倒裝有<b class='flag-5'>什么區別</b>

    美國多IP服務器和美國多服務器什么區別

    美國多IP服務器和美國多服務器什么區別 美國多IP服務器和美國多服務器在概念、功能以及應用場景上存在明顯的區別。主機推薦小編為您整理發布美國多IP服務器和美國多服務器
    的頭像 發表于 11-11 10:22 ?130次閱讀

    RTOS與Linux到底什么區別

    很多做嵌入式開發的小伙伴都存在這樣的疑惑:RTOS與Linux到底什么區別
    的頭像 發表于 10-29 09:53 ?322次閱讀

    請問ESPTOUCH和AIRKISS什么區別

    請問ESPTOUCH和AIRKISS什么區別?謝謝!
    發表于 07-12 12:44

    RV 和ARM什么區別

    district RV 和ARM什么區別
    發表于 06-26 12:41

    聊聊MCU死循環,用for(;;)還是while(1)?

    的是for(;;),而不是常用的while(1)。這僅僅是個人習慣的問題,還是更深層次的含義?一、沒啥區別黨:都是心理作用大部分網友認為二者并沒有
    的頭像 發表于 04-29 08:10 ?1209次閱讀
    聊聊MCU死循環,用for(;;)還是<b class='flag-5'>while</b>(<b class='flag-5'>1</b>)?

    線路板的層和階什么區別

    線路板的層和階什么區別
    的頭像 發表于 02-23 17:27 ?661次閱讀

    TC397多核之間數據訪問效率什么區別?本地和全局的效率什么區別

    TC397多核之間數據訪問效率什么區別,本地和全局的效率什么區別,可不可以將電機同步ADC采集放到主核0,算法在1核執行
    發表于 02-06 07:42

    SPI和QSPI什么區別

    SPI和QSPI什么區別
    發表于 02-06 06:12

    大電容和小電容什么區別

    大電容和小電容什么區別? 大電容和小電容之間的區別主要包括以下幾個方面:容量、尺寸、用途、性能、穩定性以及價格等。 首先,容量是大電容和小電容最直觀的區別之一。大電容通常具有較大的容
    的頭像 發表于 02-04 09:32 ?8772次閱讀

    求助,TC275中不同的STEP什么區別

    TC275中不同的STEP什么區別?我看了一些芯片CA-STEP,DB-STEP,DC-STEP這幾個step什么區別呢?或者從哪個手
    發表于 02-04 07:34

    hdi板與普通pcb什么區別

    hdi板與普通pcb什么區別
    的頭像 發表于 12-28 10:26 ?2709次閱讀

    pcb軟板和硬板什么區別

    pcb軟板和硬板什么區別
    的頭像 發表于 12-19 10:01 ?1821次閱讀

    RDMA和TCP/IP什么區別

    在分布式存儲網絡中,我們使用的協議RoCE、Infiniband(IB)和TCP/IP。其中RoCE和IB屬于RDMA (RemoteDirect Memory Access)技術,他和傳統的TCP/IP什么區別呢,接下來我
    的頭像 發表于 11-30 09:19 ?1672次閱讀
    RDMA和TCP/IP<b class='flag-5'>有</b><b class='flag-5'>什么區別</b>

    XFP與SFP+:什么區別

    光纖網絡領域的光模塊10G XFP和10G SFP+等,它們什么區別?XFP和SFP的定義是什么?應用場景又如何呢?XFP光模塊為一系列應用提供連接解決方案,包括數據中心、企業網和服務提供商傳輸網絡。
    的頭像 發表于 11-27 14:30 ?937次閱讀
    XFP與SFP+:<b class='flag-5'>有</b><b class='flag-5'>什么區別</b>?