编译错误:switch,“预期expression式之前”

削减到追逐我已经重新创build我的问题,因为它是相当自我解释。

这符合没有错误:

switch (n) { case 1: NSLog(@""); NSString *aStr; break; default: break; } 

这编译有错误 ,它只是缺lessNSLog():

 switch (n) { case 1: NSString *aStr; break; default: break; } 

它在编译时出现错误“NSString'之前的期望expression式

我在这里错过了什么?

在普通的C中,在这两种情况下,你都必须把它括在括号中。 我怀疑这可能会解决您的问题:

 case 1: { NSLog(@""); NSString *aStr; break; } 

看到这个问题的更多信息。

解决这个问题的另一种方法是在case标签和第一个声明之间加上一个声明,就像你在上面的工作例子中所做的那样。 查看评论和Quinn Taylor的答案获取更多信息。

在不包含括号的case下,不能将variables声明为第一个语句,而在基于C语言的许多其他语境中也不能声明该variables。 有关详细信息,请参阅在switch语句中声明variables 。

 case 0: { Loading my nib file; break; } case 1: { Loading another nib file; break; } Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example: