参数'sample2'隐藏了相同符号的全局声明

时间:2010-05-11 16:09:00

标签: c global-variables

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

test sample;

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

函数被称为something,因此something(&sample)用于指向函数中的结构。

现在我需要将sample的值复制到sample2。所以我希望sample2指向相同的结构。所以我也在main之前声明了test sample2,并将它用作全局变量。现在,当它用于指向函数结构中的内容时,必须在没有sample(*sample2).content的情况下调用sample2->content。我只需要写sample2.content。我知道这是因为sample2全局声明了......但是我在编译时也得到了这个:

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

程序运行正常,但我想摆脱这个编译器消息......为什么这么说呢?这是什么意思?

3 个答案:

答案 0 :(得分:1)

没有看到代码,我无法确定...

但听起来你有一个正在进行“测试”的功能,你称之为'sample2',这意味着你无法访问你在全球定义的样本2。

在您的问题中放置代码会很有用。

答案 1 :(得分:1)

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

一般来说,这是一个悲伤和错误的秘诀,你说你的代码按预期运行。我不知道如何或为什么不仔细看它。最简单的答案是将函数的参数名称更改为不同的名称或将全局变量更改为不同的名称。

答案 2 :(得分:1)

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

我的猜测(因为我看不到你的代码)是你将sample2作为参数传递给函数。此sample2与您在全局声明的结构不同sample2。由于它们具有相同的名称,因此您只能使用该函数中的参数,而不能使用全局sample2

请考虑修改您的问题并发布整个代码以供审核。你的问题中有很多奇怪的假设,你可能会依赖不止一个误解。