在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

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

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

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

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

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

1.while語法表達

while( 表達式 ){ 語句}

其中:

表達式:是循環(huán)條件

語句:為循環(huán)體。

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

2.for語法表達

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

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

1.先求解表達式1

2.求解表達式2

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

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

3.求解表達式3

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

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

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

這里先說一下結(jié)論,然后再驗證驗證結(jié)論。

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:

// 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編譯器生成匯編,執(zhí)行命令如下:

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

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

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

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136827
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3616

    瀏覽量

    93735
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68612

原文標(biāo)題:while(1) 和 for ( ; ; )有什么區(qū)別?

文章出處:【微信號:pcbgood,微信公眾號:奈因PCB電路板設(shè)計】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    FCCSP與FCBGA都是倒裝有什么區(qū)別

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

    美國多IP服務(wù)器和美國多服務(wù)器什么區(qū)別

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

    RTOS與Linux到底什么區(qū)別

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

    請問VCA821和VCA824什么區(qū)別

    請問VCA821和VCA824什么區(qū)別?兩個芯片的概述基本都一樣,但是細看里面的資料會發(fā)現(xiàn)一些參數(shù)圖表好像是不一樣的。那到底怎么看,什么區(qū)別
    發(fā)表于 09-05 07:59

    請問ESPTOUCH和AIRKISS什么區(qū)別

    請問ESPTOUCH和AIRKISS什么區(qū)別?謝謝!
    發(fā)表于 07-12 12:44

    RV 和ARM什么區(qū)別

    district RV 和ARM什么區(qū)別
    發(fā)表于 06-26 12:41

    STM32Cube庫和standard peripheral library什么區(qū)別

    STM32Cube庫和standard peripheral library什么區(qū)別
    發(fā)表于 05-16 06:52

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

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

    Ethernet和EtherCAT兩者什么區(qū)別和聯(lián)系?

    Ethernet和EtherCAT兩者什么區(qū)別和聯(lián)系?
    發(fā)表于 04-12 07:13

    線路板的層和階什么區(qū)別

    線路板的層和階什么區(qū)別
    的頭像 發(fā)表于 02-23 17:27 ?722次閱讀

    TC397多核之間數(shù)據(jù)訪問效率什么區(qū)別?本地和全局的效率什么區(qū)別

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

    SPI和QSPI什么區(qū)別

    SPI和QSPI什么區(qū)別
    發(fā)表于 02-06 06:12

    大電容和小電容什么區(qū)別

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

    求助,TC275中不同的STEP什么區(qū)別

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

    電源中的EMI和EMC什么區(qū)別

    電源中的EMI和EMC什么區(qū)別? 電源中的EMI和EMC是與電磁干擾相關(guān)的兩個概念,盡管它們一些相似之處,但它們不同的含義和應(yīng)用領(lǐng)域。在本篇文章中,我們將詳細探討電源中的EMI和
    的頭像 發(fā)表于 01-19 11:47 ?1670次閱讀
    主站蜘蛛池模板: 天天拍天天色| 22eee在线播放成人免费视频| 91男女视频| 天堂在线观看视频| 看黄网站免费| 天天噜噜色| 丁香五香天堂网| 手机看片国产高清| japanese色系tube日本护士| 亚洲视频在线一区| 五月婷婷激情在线| 四虎影视永久在线观看| 成人伊人亚洲人综合网站222| 天天在线天天综合网色| 亚洲小说区图片区另类春色| 日韩一级欧美一级在线观看| 国产色播| 日日摸夜夜添免费毛片小说| 黄色xxxx| 午夜伦理片在线观看| 成人精品视频在线观看播放| 性欧美丰满xxxx性久久久| 一级欧美在线的视频| 免费网站直接看| 午夜久| 年轻护士女三级| 三级黄色在线视频中文| 99久久免费精品高清特色大片| 九九国产在线| 二级片在线| 国模精品| 国产女同视频| 特级全黄大片| 手机看片日韩在线| 在线播放交视频| 九九99视频在线观看视频观看| 国产一级毛片午夜福| 亚洲色妞| 午夜美女视频在线观看高清| www.91大神| 萝l在线精品社区资源|