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语句,少一些人类的负担。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VC中ADO连接SQLSERVER的几种标准方式?

VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。 正文 一、ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您…

usb转ttl_[开源]双TYPEC转TTL串口模块

在工作中经常会用到USB转TTL串口调试工具。网上买的用的不顺手,所以做了一个。最终效果:渲染图实物图学习目的做一个USB转串口模块,使用学习渲染软件keyshot使用到的工具:立创EDA,keyshot等电烙铁,万用表等1.需要实现的功能4.根据…

linux smb 启动失败,[已解决]windows能看到smb,但是打不开

xiadao_81 于 2010-01-15 16:32:31发表:还是不行啊!郁闷!还会哪里原因的?我把配置中没有注释的全拿出来了74 workgroup mshome75 server string Samba Server76 guest okyes77 guest accountroot102 security share103 passdb backend td…

String类的构造与析构相关处理

String类原型: 1 Class String2 {3 Public:4 String(constchar*str);5 String(constString &other);6 ~String(void);7 String&operator(constString &other);8 Private:9 char*m_data;10 };String的析构函数 1 String::~String(void)2 {3 delete []m_d…

cocos2dx 字体外发光_在电致发光研发领域,选择有机材料是基于哪些原因?

阅读本文前,请您先点击上面的蓝色字体,再点击“关注”,这样您就可以免费收到最新内容了。每天都有分享,完全是免费订阅,请放心关注。声明:本文转载自网络,如有侵权,请在后台留言联系…

android点击下拉历史记录,uni-app,社交应用中,聊天页面下拉onPullDownRefresh获取历史消息,数据合并之后,滚动到下拉之前的位置,页面看不见闪动,完美解决...

一般下拉之后,拿到数据合并,会默认展示顶部第一条,模仿其他聊天应用,回到下拉之前位置,如果不做处理,可以看见下拉得到的数据,本方法完美解决有问题可以留言或者加qq445849201讨论,亲…

WebOS + WebIM

此已文重新编辑.WebOSWebOS 是基于web技术实现的类似于桌面操作系统交互风格的应用程序。实现WebOS的主要技术可以是JavaScript或者是RIA(Flex\SL)。在JS领域内的最强大和最著名的可能要数eyeos了。本文所述的WebOS也是采用JavaScript开发的。图1:此应用主要是用于大…

雨滴桌面rainmeter素材_win10 桌面如何做到清爽好看?这篇教程给你答案

当一个电脑用的时间长了以后,难免就会变得非常杂乱。伟大的领袖曾经说过,要像倒腾自己的发型一样折腾好自己的桌面。道理咱都懂,可是大家动起手来就傻眼了,这啥玩意啊,算了吧,还是不弄了。本着慈悲为怀&…

met40如何升级成鸿蒙系统,再见了,EMUI11!你好,华为鸿蒙!

本文原创,请勿抄袭和搬运,违者必究鸿蒙终于来了华为研发鸿蒙OS已经有四五年的时间,诞生时间比大家想象的还要早,并不是为了替代安卓和专门推出的鸿蒙。因为从一开始华为就确定鸿蒙OS是一款面向万物互联时代的操作系统。从华为面向…

学习委托

简单实例 1 publicclasstest2 {3 publicdeledate voidMenuHandler(stringusername);4 publicvoidMenuHandlershixian(stringusername)5 {6 response.write(username);7 }8 publicvoidshow()9 {10 MenuHandler mhMenuHandlershixian;11 mh("majuan");12 }13 publicsta…

ups容量计算和配置方法_UPS电路设计的空开、电缆及电池如何配置,计算依据是什么...

很多朋友问到关于ups相关的计算,其实关于ups方面的计算还是挺多,ups无论是接空开,还是连接电缆,以及选择电池,都可能需要计算它的电流或功率等,那么今天我们来详细了解下ups的相关计算。一、ups空开及电缆的…

android webdav客户端,WebDAV精灵(WebDAV客户端)

WebDAV精灵 让您的Phone,,Pad 成为WebDav客户端,能够使用从WebDav服务器下载文件和上载文件 .一些常用的WebDAV站点:https://webdav.yandex.com(http://www.yandex.com/)https://dav.box.com/dav(https://www.box.net/)https://webdav.mydrive.ch(https://mydrive.ch)http://my…

【李开复】从优秀到卓越 (二)

引 言2000年8月调回微软总部后,因为工作繁忙,我一直没能抽出时间和中国学生做更深入的交流。2003年,一个偶然的机会,我回到中国做了几次演讲。当时,演讲的主办者希望我多谈一谈激励中国学生的内容,多讲讲计…

多层感知机和神经网络的区别_学习笔记-从神经元到神经网络

人的大脑神经网络的复杂程度有人说,只有银河系可以比拟。总所周知,神经网络就是模仿大脑神经网络用数学知识构造的模型。单个神经元还是比较简单的。神经元一个神经元有树突,轴突,和细胞体等部分。树突接受输入信息,细…

华为鸿蒙os电视测评,高端技术下放毫不吝啬!华为智慧屏SE系列评测:鸿蒙OS让入门大屏也好用...

一、前言:高起点的华为智慧屏 终究走向更多大众用户智慧屏从概念落地为产品之后,一直都是华为旗下终端产品当中一个相当重要的角色,特别是在手机业务受阻的当下,更是成了全场景智慧化战略的核心支撑之一。凭借高品质的影音娱乐、花…

python3线程gil_python3爬虫GIL修改多线程实例讲解

我们打开程序后,会发现电脑的内存和cpu发生了变化。在对于前者上面,自然是希望内容占用小,cpu的利用越高越好。那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的知识了,再正式开…

游戏需求分析

玩家为什么玩游戏 玩家为什么要玩游戏呢?或者说,游戏设计应该遵循什么规则才能被广大用户接受呢?这里引用一部分参考资料,也补充一些个人体会。 1.挑战 挑战在竞技类游戏中体现得淋漓尽致。随着网络游戏的流行,多种游戏…

app调html页面,app界面管理(风格色调).html

APP界面管理(风格色调)$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/re…

python中注释语句和运算_python 运算及注释

#!/usr/bin/evn python# -*- coding: UTF-8 -*-#一&#xff1a;输出 1 2 3 4 5 6 8 9 10a 0while a < 10:if a 7 :passelse:print(a)a a 1print (...end...)#二&#xff1a;输出1-100的总和a0b0while a<100:b a ba a 1print (b)#三&#xff1a;输出1-100的奇数a1…

什么是程序容错性

所谓容错是指在故障存在的情况下计算机系统不失效&#xff0c;仍然能够正常工作的特性。容错即是Fault Tolerance&#xff0c;确切地说是容故障&#xff08;Fault&#xff09;&#xff0c;而并非容错误&#xff08;Error&#xff09;。例如在双机容错系统中&#xff0c;一台机器…