“每个未声明的标识符对于它出现错误的每个函数只报告一次”是什么意思?

问题描述 投票:0回答:2

我知道属于同一数据类型的多个变量可以在一个语句中声明如下:

int x, y, z;

我试图在一个语句中声明和定义属于同一数据类型的多个变量,如下所示:

#include <stdio.h>

int main() {
  int x = y = z = 50;
  printf("%d", x + y + z);
  return 0;
}

当我尝试编译上面的代码时,出现以下错误:

prog.c: In function ‘main’:
prog.c:4:11: error: ‘y’ undeclared (first use in this function)
    4 |   int x = y = z = 50;
      |           ^
prog.c:4:11: note: each undeclared identifier is reported only once for each function it appears in
prog.c:4:15: error: ‘z’ undeclared (first use in this function)
    4 |   int x = y = z = 50;
      |               ^

我不明白为什么不能在单个语句中将属于同一数据类型的多个变量初始化为相同的值,而可以声明属于同一数据类型的多个变量。

我也不明白注释“每个未声明的标识符对于它出现的每个函数只报告一次”的实际含义。为什么会出现?

不过,当我尝试下面的代码时,我分别为变量声明和定义创建了两个语句,一切都运行顺利。为什么会这样?

#include <stdio.h>

int main() {
  int x, y, z;
  x = y = z = 50;
  printf("%d", x + y + z);
  return 0;
}

得到低于预期的输出:

150
c variables compiler-errors variable-assignment
2个回答
1
投票
int x = y = z = 50;

赋值 = 运算符具有从右到左的结合性。上面的语句首先尝试将 50 赋值给 z,但由于它从未声明过,因此产生了错误。


我不明白为什么多个变量属于同一数据类型 不能在单个语句中初始化为相同的值,而 可以声明属于同一数据的多个变量 类型。

实际上你可以,但前提是它们先声明。在这种情况下,您在初始化之前没有声明 yz

您要找的是:

1) int x = 50, y = 50, z = 50;

   /* OR */

2) int x, y, z; 
 
   x = y = z = 50;

   /* Or */

3) int x = 50;
   int y = 50;
   int z = 50;

我发现每行声明一个变量(第三种方法)使代码更清晰,并防止在声明指针时出现愚蠢的错误。


我也不明白注释“每个”的实际含义 未声明的标识符只为它的每个函数报告一次 出现在。”为什么会出现?

这意味着编译器只会报告给定函数中未声明变量的第一个实例。例如,如果您有:

int x = y = z = 50;  /* Compiler only reports this instance */

z = 403;

编译器只会在第一次出现未声明的变量时报告。


0
投票

你可以像这样把它切成小块:

int x=y

你告诉计算机我需要一个名为 x 的整数,它等于 y,但是这个 y 仍然未声明,因为编译器仍在处理 x。

然后我们去y=z;

更糟糕的是,你的编译器仍然不知道什么是 z 什么是 y。

你的第二段代码有效,因为编译器已经知道你声明的每个变量,所以那里没有问题。

最后,这是简单的 C 语法,所以你应该研究一下,我敢肯定你会找到很多关于变量初始化和声明在 C 中如何工作的解释

© www.soinside.com 2019 - 2024. All rights reserved.