由于某种原因,这段代码可以工作,但它完全没有意义。
#include <stdio.h>
int main(void)
{
switch(1)
{
case 0:
while(1)
{
case 1: puts("Works"); break;
}
}
return 0;
}有人能解释一下为什么它能工作吗?它有什么应用程序?
发布于 2013-03-07 02:56:18
您可以通过switch的标签来交错语句,因为它们只是标签。这里发生的情况是:
使用while (1);
switch (1)语句跳转到case 1:标签;"Works",然后break;退出无限循环。发布于 2013-03-07 02:56:49
这样做的原因有点不直观:switch语句的case标签非常像常规标签,即为与goto语句一起使用而设计的标签。您可以在代码中的任何位置放置这样的标签。
事实证明,同样的规则也适用于case标签:您可以将它们放在其相应的switch语句中的任何位置,顺便说一句,该语句包括任何嵌套循环的主体。
您可能想要在switch语句体的控制语句中放置标签的原因甚至更不直观:事实证明,您可以使用一个名为的笨重但非常直观的构造来执行循环展开。正是这种构造使在switch语句中的其他控制结构中嵌入case标签的想法变得流行起来。
https://stackoverflow.com/questions/15255594
复制相似问题