Q为什么没有带编号的多级break语句一次跳出多个循环?我应该用什么代替,goto?
A首先,请记住它们为什么会break和continue存在——它们实际上是“结构化的gotos” 优于goto(并且被大多数回避goto)的人接受为替代方案),因为它们干净、结构化,并且在很大程度上仅限于常见的、惯用的用法。 一个假设的多级break,另一方面,将迅速失去单break的固有清洁度——程序员和代码读者将不得不仔细计算嵌套级别才能弄清楚给定的break做了什么,而插入一个新的中间嵌套循环可能会,嗯,严重破坏事物。(根据此分析,带编号的break语句可能比goto/label 对更令人困惑且容易出错。)
一次跳出多个循环的正确方法(C 也不支持)涉及一种允许命名循环的语法,以便break语句可以指定要跳出的循环的名称。
如果你确实需要一次跳出多个循环(或者从 switch 内部跳出一个循环,其中break仅仅会结束一个caselabel),是的,尽管使用goto。(但是,当你发现需要多级 break 时,这通常表明循环应该被提取到它自己的函数中,届时你可以通过使用提前返回来达到与多级 break 大致相同的效果。)