在C中是否存在标记或未标记的中断?

时间:2017-08-22 19:52:54

标签: c switch-statement break labeled-statements

与Java中break语句可以标记或未标记的情况一样,C中的语句是等价的还是实现相同的过程?

2 个答案:

答案 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}}