就像在 Java 中break
可以标记或不标记语句的情况一样,C 中是否存在等效或实现相同过程的语句?
问问题
3495 次
2 回答
8
不,没有像 Java 那样带标签的中断语句。但是,您可以使用goto
- 语句来实现类似的效果。只需在您实际想要退出的循环之后声明一个标签,并goto
在您在 Java 中使用带标签的 break 的地方使用:
int main() {
for (int i=0; i<100; i++) {
switch(i) {
case 0: printf("just started\n"); break;
case 10: printf("reached 10\n"); break;
case 20: printf("reached 20; exiting loop.\n"); goto afterForLoop;
case 30: printf("Will never be reached."); break;
}
}
afterForLoop:
printf("first statement after for-loop.");
return 0;
}
输出:
just started
reached 10
reached 20; exiting loop.
first statement after for-loop.
请注意,自从 Dijkstras 的著名论文Go To Statement Considered Harmful以来,计算机科学家一直在努力争取禁止goto
代码中的语句,因为这种语句通常会引入比if
or等控制结构更复杂的内容while
。因此,请注意您所做的事情并明智地使用它(=很少)。
于 2017-08-22T20:04:25.470 回答
2
不,c 中没有这样的东西,但是goto
Java 中不存在这样的东西,但我怀疑可以以同样的方式使用。
尽管不建议将其goto
用于流控制,因为它会使代码不必要地难以理解,并且总是有一个选项来代替goto
,但是在某些情况下 agoto
是最优雅的可能解决方案,但这些情况确实排除了使用它作为一个标记的休息。
实现类似结果的一个好方法是编写函数,这实际上更干净、更简单。你总是可以在任何时候从一个函数中返回,这相当于 break 的实际作用。当然,这在 Java 中更复杂,因为没有函数,并且构造不会是惯用的,但是在cgoto
中用于模拟标记的 break也不是惯用的。
于 2017-08-22T19:55:11.147 回答