国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145585
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97185
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73962

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    行星減速機與齒輪減速機什么區別

    行星減速機與齒輪減速機什么區別
    的頭像 發表于 01-04 16:30 ?1307次閱讀
    行星減速機與齒輪減速機<b class='flag-5'>有</b><b class='flag-5'>什么區別</b>?

    武漢芯源MCU和英飛凌MCU什么區別

    武漢芯源MCU和英飛凌MCU什么區別
    發表于 12-11 06:26

    MCU不同封裝都什么區別

    目前MCU不同封裝都什么區別
    發表于 12-01 06:41

    請問jtag和jlink什么區別啊?

    jtag和jlink什么區別啊?
    發表于 11-28 06:46

    高壓探棒和高壓差分探頭什么區別

    我們在使用功率放大器放大信號,或是需要檢測信號的時候,可能都會用到這樣一個測試測量設備,那就是高壓探棒和高壓差分探頭,那么你知道高壓探棒和高壓差分探頭什么區別嗎?一、高壓探棒和差分探頭的基本概念
    的頭像 發表于 11-19 08:38 ?484次閱讀
    高壓探棒和高壓差分探頭<b class='flag-5'>有</b><b class='flag-5'>什么區別</b>?

    ARM架構與DSP什么區別?哪一個更好?

    ARM架構與DSP什么區別?哪一個更好?
    發表于 11-19 06:14

    微波雷達和毫米波雷達什么區別

    微波雷達和毫米波雷達什么區別 前言:不知道大家有沒有發現,各種雷達模塊的使用開始逐漸加入各種智能家居產品了,像人來燈亮,人走燈滅這種雷達感應的產品早幾年就開始進入市場了,還有各種感應開關等產品
    的頭像 發表于 10-30 16:56 ?2032次閱讀
    微波雷達和毫米波雷達<b class='flag-5'>有</b><b class='flag-5'>什么區別</b>

    Re-Driver 和 Re-Timer 什么區別

    Re-Driver 和 Re-Timer 什么區別
    發表于 08-21 06:14

    使用ICP編程工具進行離線編程設置時,啟用“使用密碼”什么區別

    使用ICP編程工具進行離線編程設置時,啟用“使用密碼”什么區別
    發表于 08-19 06:04

    請問ST7701和ST7701S什么區別嗎?

    ST7701和ST7701S什么區別
    發表于 07-22 08:16

    請問CYW2019B2的SPI1與SPI2什么區別

    請問: CYW2019B2的SPI1與SPI2什么區別?SPI接口工作于Slave方式,接收外設的數據。如果設為SPI1可以正常工作;設為SPI2也可以接收全部數據,但是順序不對,請
    發表于 07-08 07:51

    sd-wan組網方案和woc設備有什么區別

    SD-WAN組網方案和WOC(廣域網優化控制器)設備是解決企業廣域網(WAN)問題的兩種不同技術路線,它們的目標部分重疊(提升性能、降低成本),但核心原理、實現方式和側重點顯著區別,主機推薦小編為您整理發布sd-wan組網方案和woc設備有
    的頭像 發表于 06-03 11:21 ?1049次閱讀
    sd-wan組網方案和woc設備有<b class='flag-5'>什么區別</b>

    GD32與STM32什么區別

    電子發燒友網站提供《GD32與STM32什么區別.docx》資料免費下載
    發表于 04-03 17:27 ?0次下載

    HSE子系統HSE_H、HSE_M和HSE_B之間什么區別

    我想知道 HSE 子系統 HSE_H、HSE_M 和 HSE_B 之間什么區別區別是它們在哪個板上運行,還是也存在功能差異?
    發表于 03-20 07:37

    請問stm32u545這種spi帶boot的和不帶boot的什么區別

    請問這種spi帶boot的和不帶boot的什么區別
    發表于 03-10 07:16