C 中是否存在标记或未标记的中断?
Is there such a thing as labeled or unlabeled break in C?
如Java中的情况,其中break
语句可以被标记或不被标记,C中是否有一个语句等效或实现相同的过程?
不,c 中没有这样的东西,但是 goto
在 Java 中不存在,但我怀疑可以以相同的方式使用。
虽然不建议使用 goto
进行流量控制,因为它会使代码不必要地难以理解,并且总有一个选项可以代替 goto
,但是在某些情况下goto
是最优雅的可能解决方案,但这些情况确实排除了将其用作带标签的中断。
实现类似结果的一种好方法,实际上更清晰、更简单的方法是编写函数。你总是可以在任何时候从一个函数中 return ,这等同于 break 的实际作用。这当然在 Java 中更复杂,因为没有函数,并且构造不会是惯用的,但也可以使用 goto
来模拟 标记的 break 在 c.
中不是惯用语
不,没有像 Java 中那样的带标签的中断语句。
但是,您可以使用 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.
请注意,自从 Dijkstra 的著名论文 Go To Statement Considered Harmful 以来,计算机科学家一直在努力禁止代码中的 goto
语句,因为这种语句通常比 if
这样的控制结构引入更多的复杂性或 while
。因此,请注意您的工作并明智地使用它(=很少)。
如Java中的情况,其中break
语句可以被标记或不被标记,C中是否有一个语句等效或实现相同的过程?
不,c 中没有这样的东西,但是 goto
在 Java 中不存在,但我怀疑可以以相同的方式使用。
虽然不建议使用 goto
进行流量控制,因为它会使代码不必要地难以理解,并且总有一个选项可以代替 goto
,但是在某些情况下goto
是最优雅的可能解决方案,但这些情况确实排除了将其用作带标签的中断。
实现类似结果的一种好方法,实际上更清晰、更简单的方法是编写函数。你总是可以在任何时候从一个函数中 return ,这等同于 break 的实际作用。这当然在 Java 中更复杂,因为没有函数,并且构造不会是惯用的,但也可以使用 goto
来模拟 标记的 break 在 c.
不,没有像 Java 中那样的带标签的中断语句。
但是,您可以使用 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.
请注意,自从 Dijkstra 的著名论文 Go To Statement Considered Harmful 以来,计算机科学家一直在努力禁止代码中的 goto
语句,因为这种语句通常比 if
这样的控制结构引入更多的复杂性或 while
。因此,请注意您的工作并明智地使用它(=很少)。