在switch语句中声明变量
这个问题在这里已经有了答案:
如果根据语言的语法进行操作,您实际上可以在交换机中声明变量。 你得到一个错误,因为“ case 0:
”是一个标签,并在C中,它是非法的声明作为标签后的第一条语句-注意,编译器期望的表达 ,如方法调用,正常分配,等等(虽然它可能是奇怪的,但这是规则。)
当你首先放置NSLog()时,你避免了这个限制。 您可以将案例的内容放在{}括号中以引入范围区块,也可以将变量声明移到开关外部。 你选择的是个人喜好的问题。 请注意,在{}括号中声明的变量仅在该范围内有效,因此使用它的任何其他代码也必须出现在这些大括号内。
编辑:
顺便说一句,这个怪癖并不像你想象的那么少见。 在C和Java中,在for , while或do循环中,甚至在if和else子句中使用局部变量声明作为孤立语句(意思是“不用大括号包围”)也是非法的(事实上,这是我强烈推荐),我认为我们一般不会写这样的错误开始,因为在这样的上下文中声明一个变量是唯一的语句是没有意义的,对于开关 /结构的情况下 ,虽然,有些人省略大括号,因为break语句是控制流的关键语句。
要查看编译器的适合性,请将这个可怕的无意义代码片段复制到您的(Objective-)C代码中:
if (1)
int i;
else
int i;
for (int answer = 1; answer <= 42; answer ++)
int i;
while (1)
int i;
do
int i;
while (1);
还有一个总是用{}括号来划定这些构造体的另一个原因。 :-)
我之前遇到过这个问题,结论是你只是把代码放在一个块中。
switch (i) {
case 0:
{
int j = 1;
break;
}
}
我使用的另一个简单的解决方法是在声明前添加一个空表达式(分号)。 这样可以避免将变量作用域限制为一个代码块(或者有一些带有代码块的情况语句,有些则没有)。
switch (i) {
case 0:;
int j = 1;
break;
}
链接地址: http://www.djcxy.com/p/14779.html