C / Objective C中的switch语句

时间:2014-11-11 15:42:15

标签: objective-c c switch-statement

我是Objective-C的新手,但是从我所知道的关于switch语句的所有内容来看,下面的代码不应该打印任何东西,因为对我来说似乎应该有一个编译错误。但是打印出2。我不懂为什么。有人可以解释一下吗?

- (void) test {
    int myVar = 2;

    switch (myVar) {
        case 1:
        {
            NSLog(@"result: %d", myVar);
            break;

            case 2:
            {
                NSLog(@"result: %d", myVar);
            }
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:13)

您可以将switch(value){case label:, ...}构造视为变量 goto <label>语句,其中:

1) switch(arg)确定哪个label执行将流向下一个。
2) 关键字 案例: 定义 标签 。示例:case label:

在switch语句中,case关键字后跟一个标签(常量表达式后跟:),它被视为goto语句中使用的标签。控制传递到case constant-expression与语句switch(arg)中的 arg 的值匹配的语句。

合法地说,你的代码没有语法错误。也就是说,它将编译和构建,并运行得很好。示例代码中的语法唯一违反的是可读性,因为执行流程忽略了块{...},在大多数情况下会阻止执行流程,并直接跳转到定义的目标标签通过case关键词,就像它应该的那样。

通常不会忽视用于试验新杂交构建体的良好先例将产生有用的结果。但是当它发生时,结果可能会成为传奇。例如, see Duff's Device