Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >"break;“是否超出了"if”语句?

"break;“是否超出了"if”语句?
EN

Stack Overflow用户
提问于 2014-07-12 13:50:37
回答 4查看 168.3K关注 0票数 41

您是否可以中断if语句,或者它是否会导致崩溃?我开始熟悉C语言,但这似乎是有争议的。第一张图片来自一本关于C语言的书("Head first C"),代码片段显示了由哈佛大学CS班级员工编写的代码。到底是怎么回事,和C标准有什么关系?

中断不会中断if语句。

1990年1月15日,AT&T的长途电话系统崩溃,6万人失去了电话服务。原因是什么?一位开发用于交易所中的C代码的开发人员试图使用break来中断if语句。但breaks并没有突破ifs,而是跳过了一整段代码,并引入了一个bug,在9个小时内中断了7,000万次电话通话。

代码语言:javascript
运行
AI代码解释
复制
for (size = 0; size < HAY_MAX; size++)
{
    // wait for hay until EOF
    printf("\nhaystack[%d] = ", size);
    int straw = GetInt();
    if (straw == INT_MAX)
        break;

    // add hay to stack
    haystack[size] = straw;
}
printf("\n");
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-12 15:38:43

无论是forwhile还是do .. while类型,break都只与最近的封闭环路或交换机交互。它经常被称为伪装的goto,因为C中的所有循环实际上都可以转换为一组条件goto:

代码语言:javascript
运行
AI代码解释
复制
for (A; B; C) D;
// translates to
A;
goto test;
loop: D;
iter: C;
test: if (B) goto loop;
end:

while (B) D;          // Simply doesn't have A or C
do { D; } while (B);  // Omits initial goto test
continue;             // goto iter;
break;                // goto end;

不同之处在于,continuebreak与编译器自动放置的虚拟标签交互。这类似于return所做的事情,因为您知道它在程序流中总是会跳到前面。开关稍微复杂一点,生成标签和计算的goto数组,但break使用它们的方式是相似的。

通知提到的编程错误是将break误解为与封闭块交互,而不是与封闭循环交互。考虑一下:

代码语言:javascript
运行
AI代码解释
复制
for (A; B; C) {
   D;
   if (E) {
       F;
       if (G) break;   // Incorrectly assumed to break if(E), breaks for()
       H;
   }
   I;
}
J;

有人认为,考虑到这样一段代码,G会跳转到I,但它会跳转到J。预期的函数将改用if (!G) H;

票数 47
EN

Stack Overflow用户

发布于 2014-07-12 15:24:19

这实际上是break语句的常规用法。如果break语句没有嵌套在if块中,那么for循环只能执行一次。

MSDN将其作为break语句的example列出。

票数 3
EN

Stack Overflow用户

发布于 2017-04-21 05:58:10

如前所述,break-statement只在中使用开关和循环。这是另一种实现所要求的内容的方法。我正在复制其他人没有提到的https://stackoverflow.com/a/257421/1188057。这只是一个涉及do-while循环的技巧。

代码语言:javascript
运行
AI代码解释
复制
do {
  // do something
  if (error) {
    break;
  }
  // do something else
  if (error) {
    break;
  }
  // etc..
} while (0);

虽然我更喜欢使用goto-statement。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24714287

复制
相关文章
python中实现有序字典
  那如何生成一个有序的字典呢,可以使用collections模块中的OrderdDict类,可以这样
py3study
2020/01/07
4690
在pandas中使用数据透视表
经常做报表的小伙伴对数据透视表应该不陌生,在excel中利用透视表可以快速地进行分类汇总,自由组合字段聚合计算,而这些只需要拖拉拽就能实现。
bugsuse
2020/11/06
2.9K0
在pandas中使用数据透视表
在pandas中使用数据透视表
经常做报表的小伙伴对数据透视表应该不陌生,在excel中利用透视表可以快速地进行分类汇总,自由组合字段聚合计算,而这些只需要拖拉拽就能实现。
朱卫军 AI Python
2022/04/03
3.1K0
在pandas中使用数据透视表
将pandas数据显示到现有的flask html表中
2 pandas读写数据库 在python连接好数据库后,pandas可以利用read_sql()方法将数据读入DataFrame。这里可以看一下代码。
赵云龙龙
2020/12/15
4.4K0
将pandas数据显示到现有的flask html表中
pandas中在groupby后,用first来实现分离代码
plt.scatter(center[1,0], center[1,1], s = 200, c = 'b', marker = 's')
好派笔记
2022/06/07
1.3K0
用Pandas在Python中可视化机器学习数据
为了从机器学习算法中获取最佳结果,你就必须要了解你的数据。
Hans He
2018/02/05
6.2K0
iOS开发中在swift项目中使用HandyJSON将字典转成模型
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80271914
用户1451823
2018/09/13
2.4K0
iOS开发中在swift项目中使用HandyJSON将字典转成模型
用Pandas在Python中可视化机器学习数据
您必须了解您的数据才能从机器学习算法中获得最佳结果。
花落花飞去
2018/02/06
2.9K0
在pandas中使用pipe()提升代码可读性
我们在利用pandas开展数据分析时,应尽量避免过于碎片化的组织代码,尤其是创建出过多不必要的中间变量,既浪费了内存,又带来了关于变量命名的麻烦,更不利于整体分析过程代码的可读性,因此以流水线方式组织代码非常有必要。
Feffery
2020/11/09
4920
在 Pandas 中使用 Merge、Join 、Concat合并数据的效率对比
来源:Deephub Imba本文约1400字,建议阅读15分钟在 Pandas 中有很多种方法可以进行DF的合并。本文将研究这些不同的方法,以及如何将它们执行速度的对比。 合并DF Pandas 使用 .merge() 方法来执行合并。 import pandas as pd     # a dictionary to convert to a dataframe data1 = {'identification': ['a', 'b', 'c', 'd'],       'Customer_Name':
数据派THU
2022/06/02
1.4K0
在 Pandas 中使用 Merge、Join 、Concat合并数据的效率对比
在pandas中使用pipe()提升代码可读性
我们在利用pandas开展数据分析时,应尽量避免过于「碎片化」的组织代码,尤其是创建出过多不必要的「中间变量」,既浪费了「内存」,又带来了关于变量命名的麻烦,更不利于整体分析过程代码的可读性,因此以流水线方式组织代码非常有必要。
朱卫军 AI Python
2022/04/03
3970
在pandas中使用pipe()提升代码可读性
在 Pandas 中使用 Merge、Join 、Concat合并数据的效率对比
在 Pandas 中有很多种方法可以进行DF的合并。本文将研究这些不同的方法,以及如何将它们执行速度的对比。
deephub
2022/06/04
2K0
在 Pandas 中使用 Merge、Join 、Concat合并数据的效率对比
在pandas中遍历DataFrame行
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
用户7886150
2020/12/26
3.4K0
在函数中接受元组与字典
# 在函数中接受元组与字典 有一种特殊方法,即分别使用 * 或 ** 作为元组或字典的前缀,来使它们作为一个参数为 函数所接收。当函数需要一个可变数量的实参时,这将非常有用。 # 代码 # 当args变量前面添加了一个*时,函数的所有其他的参数都将传递到args中,并作为一个元组储存 # 如果采用的是 ** 前缀,则额外的参数将被视为字典的键值—值配对。 def powersum(power, *args): '''Return the sum of each argument raised to
benym
2022/07/14
1.2K0
.NET中的密钥加密
本教程将演示如何通过System.Security.Cryptography在.NET Framework 1.1中实现对称加密/密钥加密。
MelodyS
2018/03/12
3.1K0
.NET中的密钥加密
在现有线程安全类中添加功能
Java类库中包含许多有用的“基础模块”类。通常应该优先选择重用这些类而不是开发新类:重用能降低开发工作量、开发风险以及维护成本。很多情况这些现有的类只能提供大部分工作,我们需要在不破坏线程安全的情况下添加一些新的操作。 要添加一个新的原子操作,有以下几种方法: 第一种:修改原始的类 这种方法最简单最安全。但通常情况下无法访问或修改类的源代码。 第二种:扩展类机制(通过继承) 下面的代码中BetterVector扩展了Vector,并添加了新方法putIfAbsent。但并非所有的类都像Vector那样将状
SuperHeroes
2018/05/31
7240
Android新手之旅(11) 在现有页面中插入新的view
  一些特定的情况下,无法用静态的方法定义页面中用到的view。如自定义的曲线图,就是一个独立的view,要把它作为一个部分插入到页面中,需要以下的方法: LinearLayout l = new LinearLayout(this);   //l就是当前的页面的布局 l.addView(myView);   //加入新的view l.setPadding(20, 390, 20, 40);  //设置位置 LinearLayout.LayoutParams p = new LinearLayout.Lay
用户1075292
2018/01/23
1.4K0
Python中使用item()遍历字典
Python中通常使用for...in遍历字典,本文使用item()方法遍历字典。
py3study
2020/01/09
1.5K0
Python中使用item()遍历字典
使用 Pandas 在 Python 中绘制数据
在有关基于 Python 的绘图库的系列文章中,我们将对使用 Pandas 这个非常流行的 Python 数据操作库进行绘图进行概念性的研究。Pandas 是 Python 中的标准工具,用于对进行数据可扩展的转换,它也已成为从 CSV 和 Excel 格式导入和导出数据的流行方法。
用户1880875
2021/09/15
7.2K0
【Python基础】在pandas中使用pipe()提升代码可读性
我们在利用pandas开展数据分析时,应尽量避免过于「碎片化」的组织代码,尤其是创建出过多不必要的「中间变量」,既浪费了「内存」,又带来了关于变量命名的麻烦,更不利于整体分析过程代码的可读性,因此以流水线方式组织代码非常有必要。
黄博的机器学习圈子
2020/11/17
9360
【Python基础】在pandas中使用pipe()提升代码可读性

相似问题

Java Hashtable在'put‘期间用新的密钥覆盖现有的密钥

41

用python字典处理密钥错误

13

用公共密钥合并python字典

51

Pandas -将字典添加到现有行

20

在pandas中遍历字典

115
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档