我是新手,非常感谢任何帮助。
使用未声明的标识符'k'
void initBricks(GWindow window)
{
// print bricks
for(int k = 0; k < ROWS; k++);
{
// int I have problem with
int b = k;
//coordinats
int x = 2;
int y = 10
}
}
答案 0 :(得分:6)
查看for
循环后的分号:
for(int k = 0; k < ROWS; k++);
{
// int I have problem with
int b = k;
//coordinats
int x = 2;
int y = 10
}
与
相同for(int k = 0; k < ROWS; k++) //<-- no semicolon here
{
}
{
// int I have problem with
int b = k;
//coordinats
int x = 2;
int y = 10
}
k
仅在for
循环的块内有效,下一个块不起作用
了解k
。
你必须写
for(int k = 0; k < ROWS; k++) //<-- no semicolon here
{
int b = k;
//coordinats
int x = 2;
int y = 10
}
在C中,变量的范围由块(代码行)决定 花括号),你可以这样:
void foo(void)
{
int x = 7;
{
int x = 9;
printf("x = %d\n", x);
}
printf("x = %d\n", x);
}
它会打印
9
7
因为有两个x
变量。内循环中的int x = 9
“覆盖”了x
外块。内循环x
是与外部块x
不同的变量,
但是当内环结束时,内环x
停止退出。这就是你无法访问的原因
来自其他块的变量(除非内部循环不声明变量
同名)。这将例如生成编译错误:
int foo(void)
{
{
int x = 9;
printf("%d\n", x);
}
return x;
}
你会收到这样的错误:
a.c: In function ‘foo’:
a.c:30:12: error: ‘x’ undeclared (first use in this function)
return x;
^
a.c:30:12: note: each undeclared identifier is reported only once for each function it appears in
下一个代码将编译
int foo(void)
{
int x;
{
int x = 9;
printf("%d\n", x);
}
return x;
}
但你会得到这个警告
a.c: In function ‘foo’:
a.c:31:12: warning: ‘x’ is used uninitialized in this function [-Wuninitialized]
return x;
^
在C99标准之前你不能写for(int i = 0; ...
,你必须申报
for
循环之前的变量。如今大多数现代编译器都使用C99作为默认值,这就是你看到的原因
很多答案在for()
中声明变量。但变量i
会
仅在for
循环中可见,因此相同的规则适用于示例中
以上。请注意,这仅适用于for
循环,无法执行while(int c = getchar())
,您将收到错误消息
来自编译器。
还要注意分号,写
if(cond);
while(cond);
for(...);
与做
相同if(cond)
{
}
while(cond)
{
}
for(...)
{
}
那是因为C语法基本上是在if
之后,while
,for
之后
你需要一个陈述或一块陈述。 ;
是有效的陈述
哪个“没什么”。
在我看来,这很难找到错误,因为当你阅读大脑时经常错过;
看看这条线。