代码之家  ›  专栏  ›  技术社区  ›  NLed

参数“sample2”隐藏同一符号的全局声明

  •  0
  • NLed  · 技术社区  · 14 年前

    我在C中有一个奇怪的问题,我有一个结构,我把样本指向这个结构:

    test sample;

    现在在代码中,我通过一个函数调用这个结构:

    调用函数 something 如此 something(&sample) 用于指向函数中的结构。

    现在我需要复制 sample sample2 …所以我想要 样本2 指向相同的结构。所以我也宣布 test sample2 在main之前,并将其用作全局变量。现在,当它用于指向函数结构中的内容时, 样品 必须在没有 (*sample2).content sample2->content . 我只需要写 sample2.content . 我知道这是因为sample2在全球范围内声明了…但我在编译时也得到了:

    comment 528 - Argument 'sample2' conceals a global declaration of the same symbol

    程序运行正常,但我想去掉这个编译器消息…为什么这么说?这是什么意思?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Ukko    14 年前

    问题是在函数内部,如果您引用符号 sample 编译器有两种选择。第一个是全局变量,第二个是为函数提供的参数。编译器正在做的是提醒您,它假定您指的是局部变量而不是全局变量。

    一般来说,这是一个解决悲伤和错误的方法,您说您的代码按预期运行。我不能不看细节就说怎么说,为什么说。最简单的答案是,只需将函数参数的名称更改为不同的名称,或将全局变量更改为不同的名称。

        2
  •  1
  •   Salgar    14 年前

    没有看到代码我不能确定…

    但听起来您有一个函数正在进行一个“测试”,您称之为“sample2”,这样做意味着您无法访问全局定义的sample2。

    将代码放入问题中会很有用。

        3
  •  1
  •   Michiel Buddingh    14 年前

    实际上,你必须用圆点( . )成员选择器而不是 箭头(箭头) -> )成员选择器,因为示例是一个结构,而不是 而不是指向结构的指针。这与你收到的错误信息无关;

    我猜(因为我看不到你的代码)你通过了 sample2 作为函数的参数。这个 样本2 是不同的 样本2 比您在全球范围内声明的结构更重要。因为它们具有相同的名称,所以只能在该函数中使用参数,而不能使用全局参数 样本2 .

    请考虑编辑您的问题并发布整个代码以供审阅。你的问题中有很多奇怪的假设,而且你可能依赖于一个以上的误解。