gpt4 book ai didi

c - 使用已声明的未声明标识符 'k'

转载 作者:行者123 更新时间:2023-11-30 18:21:22 28 4
gpt4 key购买 nike

我是新手,希望得到任何帮助。

use of undeclared identifier '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
}
}

最佳答案

查看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循环的 block 内有效,下一个 block 无效了解k

你必须写

for(int k = 0; k < ROWS; k++)   //<-- no semicolon here
{
int b = k;
//coordinats
int x = 2;
int y = 10
}

在 C 中,变量的范围由 block (中的代码行)确定大括号),你可以这样:

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外 block 。内部循环 x 是与外部 block x 不同的变量,但当内部循环结束时,内部循环 x 将停止退出。这就是为什么你无法访问来自其他 block 的变量(除非内部循环没有声明变量具有相同的名称)。例如,这会生成编译错误:

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 语法基本上表示,在 ifwhilefor 之后您需要一个语句或语句 block 。 ; 是一个有效的语句它“什么也不做”。

在我看来,这些错误很难发现,因为当你阅读时,大脑经常会错过 ;看那条线。

关于c - 使用已声明的未声明标识符 'k',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48855288/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com