7

就像在 Java 中break可以标记或不标记语句的情况一样,C 中是否存在等效或实现相同过程的语句?

4

2 回答 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代码中的语句,因为这种语句通常会引入比ifor等​​控制结构更复杂的内容while。因此,请注意您所做的事情并明智地使用它(=很少)。

于 2017-08-22T20:04:25.470 回答
2

不,c 中没有这样的东西,但是gotoJava 中不存在这样的东西,但我怀疑可以以同样的方式使用。

尽管不建议将其goto用于流控制,因为它会使代码不必要地难以理解,并且总是有一个选项来代替goto,但是在某些情况下 agoto是最优雅的可能解决方案,但这些情况确实排除了使用它作为一个标记的休息。

实现类似结果的一个好方法是编写函数,这实际上更干净、更简单。你总是可以在任何时候从一个函数中返回,这相当于 break 的实际作用。当然,这在 Java 中更复杂,因为没有函数,并且构造不会是惯用的,但是在goto中用于模拟标记的 break也不是惯用的。

于 2017-08-22T19:55:11.147 回答