为什么同一结构变量

时间:2017-08-17 13:03:21

标签: c structure

我开始在结构上做程序。我对于声明结构本身感到困惑,因为它允许同一变量的多个声明,这在c中并不常见。

让我们考虑以下代码:

#include<stdio.h>

struct {
        int x;
        int y;
}u, v;

int main()
{
        struct {int x; int y;} u = {3, 4},  v = {5, 6};
/*      struct {int x; int y;} u, v*/
        printf("%d\n", u.x);
        printf("%d\n", v.y);

        return 0;
}

一般情况下,C不允许同一个变量的多个声明,如果我没有在main中注释掉第二个语句,也会这样做。但我怀疑的是,如果一个是在main而不是其他变量中,它忽略了多个相同变量的声明?

2 个答案:

答案 0 :(得分:3)

某些范围内的变量允许在封闭范围内使用阴影变量。所以这两个变量都存在,但是如果你在u内写main,它就会引用main中声明的那个。

不要写这样的代码,虽然合法,但这很令人困惑。

答案 1 :(得分:2)

如果在不同的范围内声明它们,则C允许多个声明相同的变量。在u中声明的具有块范围的main将隐藏全局声明的u声明。

§6.2.1(p4):

  

[...]在内部范围内,标识符指定在内部范围内声明的实体;在外部范围内声明的实体在内部范围内隐藏(并且不可见)。