我开始在结构上做程序。我对于声明结构本身感到困惑,因为它允许同一变量的多个声明,这在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而不是其他变量中,它忽略了多个相同变量的声明?
答案 0 :(得分:3)
某些范围内的变量允许在封闭范围内使用阴影变量。所以这两个变量都存在,但是如果你在u
内写main
,它就会引用main
中声明的那个。
不要写这样的代码,虽然合法,但这很令人困惑。
答案 1 :(得分:2)
u
中声明的具有块范围的main
将隐藏全局声明的u
声明。
§6.2.1(p4):
[...]在内部范围内,标识符指定在内部范围内声明的实体;在外部范围内声明的实体在内部范围内隐藏(并且不可见)。