在C中,为什么多个声明适用于全局变量而不适用于局部变量?

Rüp*_*ure 10 c

在下面的代码中,为什么多个声明(和一个定义)适用于全局变量x,而不适用ymain()函数内部的局部变量?它显示以下2个错误:

1)没有联系的'y'重新声明

2)之前的'y'声明就在这里

为什么它显示局部变量但不是全局变量的错误?不仅是我的书,而且本论坛的以下2个链接清楚地表明我们可以多次声明一个变量(尽管只定义一次).

link1 link2

并且请注意解释第一个错误"没有链接"的部分是什么,"没有连接的'y'的重新声明"是什么意思?什么联系和谁?将局部变量链接到哪里?

    #include<stdio.h>

    int x;
    int x;
    int x=303;

    int main(void)
    {

      int y;
      int y;
      int y=776;   //Works fine if above 2 declarations are removed!!

      printf("The value of x is %d,and of y is %d",x,y);

    }
Run Code Online (Sandbox Code Playgroud)

mad*_*tya 22

在C和C++中,int y; 函数内部是声明和定义.

在C中,int x;文件范围内(任何函数之外)是一个声明和一个暂定的定义.允许多个暂定定义; 只允许一个定义.


das*_*ght 5

这是C99标准第6.2.2节第2部分中定义的方式:

在构成整个程序的翻译单元和库的集合中,具有外部链接的特定标识符的每个声明表示相同的对象或功能.在一个翻译单元内,具有内部链接的标识符的每个声明表示相同的对象或功能.没有链接的标识符的每个声明表示唯一的实体.

"全局"变量x具有外部链接,因此它们表示相同的对象.y另一方面,局部变量没有链接,因此存在冲突.

参考文献:C99标准.