与Java中break
语句可以标记或未标记的情况一样,C中的语句是等价的还是实现相同的过程?
答案 0 :(得分:4)
不,Java中没有标记的break语句。
但是,您可以使用goto
- 语句来实现类似的效果。只需在您实际想要退出的循环之后声明一个标签,并使用goto
在Java中使用标记的中断:
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
或{等控制结构引入更多复杂性{1}}。所以要注意你做了什么并明智地使用它(=很少)。
答案 1 :(得分:2)
不,c中没有这样的东西,但是Java中不存在goto
,但我怀疑可以使用相同的方式。
虽然不建议使用goto
进行流量控制,因为它会使代码难以理解,并且总是有一个选项而不是goto
,但是有些情况下{ {1}}是最优雅的解决方案,但这些情况不会将其用作带标签的中断。
通过编写函数,实现类似结果并且实际上更简洁和更简单的好方法。您总是可以在任何时候从函数返回,这相当于实际上的中断。当然,这在Java中更复杂,因为没有函数,并且构造不是惯用的,但是使用goto
来模拟标记的break 在{{{{{ 3}}