日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言switch为什么要加break,c语言学习笔记 switch case语句为什么要加break

發布時間:2023/11/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言switch为什么要加break,c语言学习笔记 switch case语句为什么要加break 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先來看一個沒有break的例子:

int main()

{

int a = 1;

switch (a)

{

case 1:

printf("1");

case 2:

printf("2");

}

}

我們看一下它的匯編代碼:

switch (a)

0137181F mov eax,dword ptr [a]

01371822 mov dword ptr [ebp-0D0h],eax

01371828 cmp dword ptr [ebp-0D0h],1

0137182F je main+4Ch (0137183Ch)

01371831 cmp dword ptr [ebp-0D0h],2

01371838 je main+59h (01371849h)

0137183A jmp main+66h (01371856h)

{

case 1:

printf("1");

0137183C push offset string "1" (01377B30h)

01371841 call _printf (0137104Bh)

01371846 add esp,4

case 2:

printf("2");

01371849 push offset string "2" (01377B34h)

0137184E call _printf (0137104Bh)

01371853 add esp,4

可以看一下,case語句只是被編譯成了一個具體的入口地址,但是并沒有告訴程序怎么出來,從哪里出來,那么如果沒有出口地址,那么程序就會按順序執行下去,所以case2入口地址處的代碼也被執行了。

如果是加了break語句之后就變成下面這樣了:

switch (a)

00AC181F mov eax,dword ptr [a]

00AC1822 mov dword ptr [ebp-0D0h],eax

00AC1828 cmp dword ptr [ebp-0D0h],1

00AC182F je main+4Ch (0AC183Ch)

00AC1831 cmp dword ptr [ebp-0D0h],2

00AC1838 je main+5Bh (0AC184Bh)

00AC183A jmp main+68h (0AC1858h)

{

case 1:

printf("1");

00AC183C push offset string "1" (0AC7B30h)

00AC1841 call _printf (0AC104Bh)

00AC1846 add esp,4

break;

00AC1849 jmp main+68h (0AC1858h)

case 2:

printf("2");

00AC184B push offset string "2" (0AC7B34h)

00AC1850 call _printf (0AC104Bh)

00AC1855 add esp,4

break語句被編譯成了一個jmp,跳轉語句,那么再執行case1的過程中,自然會遇到jmp語句,而這個跳轉語句正好把case2給跳過去了。

其實我覺得這種情況完全可以讓編譯器自動添加break語句,少一些人類的負擔。

總結

以上是生活随笔為你收集整理的c语言switch为什么要加break,c语言学习笔记 switch case语句为什么要加break的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。