带有非复合语句用例的C switch语句?

时间:2013-11-16 16:37:31

标签: c

可以使用非复合子语句编写C开关语句:

int x = 2;
int y = 3;

int main()
{
    switch (x)
        y++; // ok

    switch (x)
        case 2: y++; // ok
}

这有什么用例吗?也就是说,是否有理由使用switch语句的非复合子语句?

2 个答案:

答案 0 :(得分:1)

代码中的第一个开关块没有做任何事情。

当评估switch语句表达式时,将忽略在匹配的case标签或default label出现之前存在的源代码。因此,它不会在下面的程序中打印“Before case”声明。

int x = 2;
int y = 3;

    int main()
    {
        switch (x)
        {
            y++; 
             printf("Before case");
         case 2:
            printf("In case 2");
            break;
         }

       return 0;
    }

输出:

In case 2

答案 1 :(得分:1)

“控制传递给case常量表达式与switch(表达式)的值匹配的语句。[...] 执行语句正文从所选语句开始,一直持续到正文结束或直到break语句将控件移出正文。“ (http://msdn.microsoft.com/

我认为第一个switch没有做任何事情......当我编译它时,y为4,这意味着它只增加了一次。