【发布时间】:2015-01-08 05:23:09
【问题描述】:
我是 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;
}
}
}
【问题讨论】:
-
a
case:不是块或独立语句。这是一个标签。将其视为条件goto的目标。 -
不知道为什么投反对票。这是有趣的 C 语言的一个非常微妙的细节。这是因为它是有效代码还是语法巧合而编译?另外,去查找“达夫的设备”。
-
@bbum 它是有效的,正是因为
cases 是标签。还有,达夫的设备。 -
如果必须在
case:的主体中声明变量,则必须使用方括号。这就是我遇到这个问题的方式。我的例子被剥离到核心。 -
值得注意的是,这不是 Objective-C 的行为。这也表现如 C 中所示。 gist.github.com/wjlafrance/ce7581374a47ed65bf44
标签: objective-c c switch-statement