代码之家  ›  专栏  ›  技术社区  ›  Antony Nepgen

C中有没有标记或未标记的break?

  •  8
  • Antony Nepgen  · 技术社区  · 7 年前

    与Java中的情况一样,其中 break 语句可以标记也可以不标记,C中是否有一个语句是等价的或实现相同的过程?

    2 回复  |  直到 7 年前
        1
  •  10
  •   Stephan Lechner    7 年前

    不,没有像Java中那样的带标签的break语句。 goto -声明达到了类似的效果。只需在实际要退出的循环之后声明一个标签,并使用 转到

    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 计算机科学家一直在努力争取禁止 -来自代码的语句,因为该语句通常比控制结构(如 if while . 所以要知道你在做什么,并明智地使用它。

        2
  •  2
  •   Iharob Al Asimi    7 年前

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

    尽管不建议使用 对于流控制,因为它使代码不必要地难以理解,并且总是有一个选项代替 然而,在某些情况下 转到

    实现类似结果的一个好方法是编写函数,这实际上更简洁。你总是可以在任何时候从函数返回,这相当于break实际做的事情。当然,这在Java中更为复杂,因为没有函数,并且构造不是惯用的,而是使用 转到 模仿 在中不惯用