C / Objective C中的switch语句

我是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; } } } 

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

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

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

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

通常不会忽视用于试验新的杂合构建体的良好先例将产生有用的结果。 但是当它发生时,结果可能会成为传奇。 例如, 请参阅Duff的设备