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.

中不是惯用语

不,没有像 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。因此,请注意您的工作并明智地使用它(=很少)。