C中是否有标记或未标记的中断?

Ant*_*gen 4 c break switch-statement labeled-statements

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

Ste*_*ner 5

不,没有像Java这样的带标签的中断语句。但是,您可以使用goto-statement实现类似的效果。只需在您实际要退出的循环之后立即声明标签,然后使用gotoJava中本应使用标记中断的位置即可:

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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

just started
reached 10
reached 20; exiting loop.
first statement after for-loop.
Run Code Online (Sandbox Code Playgroud)

请注意,自Dijkstras著名论文《考虑到声明》以来,有害的计算机科学家为禁止goto代码声明而进行了艰苦的努力,因为该声明通常比诸如if或的控制结构引入更多的复杂性while。因此,请注意您的操作并明智地使用它(=很少)。

  • 有趣的是,这个 goto 示例实际上比带有标签 break/continue 的 Java-spaghetti 编程清晰得多。他们拒绝在语言中实现 goto,然后想出了比 goto 糟糕十倍的其他东西...... (4认同)
  • @Lundin 我不同意这更清楚。我会发现 `break LOOP_NAME;` 同样清晰,但可能更容易阅读,因为我会在读取循环头时读取循环名称,并将标签与循环本身相关联。 (3认同)