|
|
|
|
 想不到被这样一个不起眼的小问题给难倒了! - wang_solaris [ 2006-05-19 17:12 | 917 byte(s)]
 Re: 想不到被这样一个不起眼的小问题给难倒了! - nxin [ 2006-05-21 11:02 | 39 byte(s)]
 Re: 想不到被这样一个不起眼的小问题给难倒了! - canopy [ 2006-05-19 20:57 | 652 byte(s)]
 Re: 想不到被这样一个不起眼的小问题给难倒了! - sixpeople [ 2006-05-19 20:19 | 364 byte(s)]
 Re: 想不到被这样一个不起眼的小问题给难倒了! - Atu [ 2006-05-19 17:28 | 212 byte(s)]
 Re: 想不到被这样一个不起眼的小问题给难倒了! - wang_solaris [ 2006-05-19 17:33 | 168 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
switch (a) {
case 1 :
int i = 10; /* 在这里声明变量就报错 */
foo1();
foo2();
break;
case 2 :
;
int j = 10; /* 放一条语句在前面就行了 */
foo1();
foo2();
break;
...
};
上面的代码编译通不过。大家不妨试一试。报int i = 10;那边有错。
如果说case里面不能声明局部变量,那为什么case 2的写法就可以了?
case 2下面的分号表示一条语句。就是说在声明变量的前面放一条语句就不报错了,要是它是case后的第一条语句就会报错。
case 1用花括号括起来肯定是没有问题了。但是书上明明写的很清楚,case里面可以不用花括号的呀。
实在想不出为什么。
我是在linux2.4.20/gcc3.2.2下编译的。
谁能帮我解释一下,先谢谢了!
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
没有什么好解释的,case里不用 {},说的是不定义变量的情况;
如果定义了新变量,就得使用{}
switch( .. )
{
case 2: { int n; ... }
case ...
...
}
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
是否是这样?
switch (a) {
case 1 :
int i = 10; /* 在这里声明变量就报错 */
foo1();
foo2();
break;
case 2 :
;
int j = 10; /* 放一条语句在前面就行了 */
foo1();
foo2();
break;
...
};
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
在 C 语言中,
> case 2 :
> ;
> int j = 10;
"case 2: ; " 是个 statement
"int j = 10;" 是个 declaration
这两个都可以出现在 compound statement 中,compound statement 就是用 { 和 } 包起来的一些 statement 和 declaration.
[注:把 statement 和 declaration 混合起来是C99的语法,GCC 3.2.3 缺省使用的 C 语言语法是 C89 加上一些扩展,这是其中的一个扩展。]
而
> case 1 :
> int i = 10;
不是一个合法的 statement, 也不是一个合法的 declaration.
|
|
|
[Original]
[Print]
[Top]
|
|
|