【问题标题】:C switch statement with non-compound statement use case? [duplicate]C switch 语句与非复合语句用例? [复制]
【发布时间】:2013-11-16 16:37:31
【问题描述】:

可以用非复合子语句编写 C switch 语句:

int x = 2;
int y = 3;

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

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

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

【问题讨论】:

  • 只是问什么是非复合子语句?
  • 一个 switch 语句包含一个语句:switch (expr) statement。这一条语句是子语句。复合语句是用大括号括起来的语句,包含一系列语句:{ f(); g(); h(); }。通常开关与复合子语句一起使用。根据我的示例,我在问是否有与非复合子语句一起使用的用途。

标签: c


【解决方案1】:

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

当 switch 语句表达式被计算时,在匹配 case 标签或默认标签出现之前存在的源代码将被忽略。因此它不会在下面的程序中打印语句“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

【讨论】:

  • 你的陈述都是正确的,但不要回答问题。
【解决方案2】:

“控制权传递给 case 常量表达式与 switch ( 表达式 ) 的值匹配的语句。[...] 执行 语句体 从selected 语句 并继续执行直到正文结束或直到 break 语句将控制权转移出正文。” (http://msdn.microsoft.com/)

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

【讨论】:

  • 没错,第一个y++ 没有被执行——但这并不能回答问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多