首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合开关和while在C++中

混合开关和while在C++中
EN

Stack Overflow用户
提问于 2013-03-07 02:52:25
回答 2查看 99关注 0票数 1

由于某种原因,这段代码可以工作,但它完全没有意义。

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
  switch(1)
    {
      case 0:
        while(1)
          {
            case 1: puts("Works"); break;
          }
    }
  return 0;
}

有人能解释一下为什么它能工作吗?它有什么应用程序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-07 02:56:18

您可以通过switch的标签来交错语句,因为它们只是标签。这里发生的情况是:

使用while (1);

  • the定义的无限循环
  • switch (1)语句跳转到case 1:标签;
  • 打印"Works",然后break;退出无限循环。
票数 4
EN

Stack Overflow用户

发布于 2013-03-07 02:56:49

这样做的原因有点不直观:switch语句的case标签非常像常规标签,即为与goto语句一起使用而设计的标签。您可以在代码中的任何位置放置这样的标签。

事实证明,同样的规则也适用于case标签:您可以将它们放在其相应的switch语句中的任何位置,顺便说一句,该语句包括任何嵌套循环的主体。

您可能想要在switch语句体的控制语句中放置标签的原因甚至更不直观:事实证明,您可以使用一个名为的笨重但非常直观的构造来执行循环展开。正是这种构造使在switch语句中的其他控制结构中嵌入case标签的想法变得流行起来。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15255594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档