label之后紧跟变量申明编译是会报"error: a label can only be part of a statement and a declaration is not a statement",
有些地方会说增加一个{ },然后就可以编译通过了,尝试之后的确可以,如下:
int main(int argc, char **argv)
{
int i,research=0;
label:
{
int j=5;
for (i=0; i<3; i++) {
printf("i = %d;j = %d\n", i, j);
}
if(research < 2)
{
research++;
j++;
goto label;
}
}
return 0;
}
上面编译通过的程序,我预期的输出是下面的:
i = 0;j = 5
i = 1;j = 5
i = 2;j = 5
i = 0;j = 6
i = 1;j = 6
i = 2;j = 6
i = 0;j = 7
i = 1;j = 7
i = 2;j = 7
但是实际输出结果却是这样的:
i = 0;j = 5
i = 1;j = 5
i = 2;j = 5
i = 0;j = 5
i = 1;j = 5
i = 2;j = 5
i = 0;j = 5
i = 1;j = 5
i = 2;j = 5
后来汇编发现j++; 指令被NOP代替了,不知道为什么,但是,希望大家在使用goto时注意下.