【问题标题】:Why no error on multiple declarations of same structure variable为什么同一结构变量的多个声明没有错误
【发布时间】:2017-08-17 13:03:20
【问题描述】:

我开始做关于结构的程序。我对声明结构本身感到困惑,因为它允许对同一个变量进行多次声明,这在 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 而不是其他变量,为什么它会忽略相同变量的多个声明?

【问题讨论】:

  • 内部u与外部u不同。两者的共同点是名称,内部u 隐藏(隐藏)外部uv 也一样。
  • char x; void foo(int x) {{float x; {double x;}}} 有效。 :-)

标签: c structure


【解决方案1】:

允许某些范围内的变量隐藏封闭范围内的变量。所以这两个变量都存在,但是如果你在main里面写u,它是指在main中声明的那个。

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

【讨论】:

  • 那么,写在main外面的u和v是全局变量吗?
  • C 中的正确术语是 file-scoped 变量。这可能就是您所说的 global 的意思。
【解决方案2】:

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

§6.2.1 (p4):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多