error: a label can only be part of a statement and a declaration is not a statement
如下代码报错:
#include<stdio.h>
int main()
{
int a;
switch (a) {
case 0:
break;
case 1:
int aa;
break;
case 2:
break;
default:
break;
}
return 0;
}
这样改,就不会报错。
#include<stdio.h>
int main()
{
int a;
switch (a) {
case 0:
break;
case 1:; //加一个空的‘;’,标示空声明
int aa;
break;
case 2:
break;
default:
break;
}
return 0;
}
这样改,也不会报错。
#include<stdio.h>
int main()
{
int a;
int aa; //定义放到 switch 之前
switch (a) {
case 0:
break;
case 1:
break;
case 2:
break;
default:
break;
}
return 0;
}
总结:
C99之前,在一代码块中所有的定义都必须在声明之前,所以,一个标签在定义之前是没有意义的。C99放宽了这个限制,允许代码块中混合定义、声明,但这这个标签不能在定义之前的限制没有改变。
转载:a label can only be part of statement and a declaratioin is not a statement