c - 在 C 语言中,为什么多重声明对全局变量有效但对局部变量无效?

标签 c

在下面的代码中,为什么多个声明(和一个定义)对全局变量 x 有效,但对局部变量 y 无效,它位于 主要()功能?它显示以下 2 个错误:

1) redeclaration of 'y' with no linkage

2) previous declaration of 'y' was here

为什么显示局部变量错误而不是全局变量?不仅是我的书,而且来自该论坛的以下 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);

    }

最佳答案

在 C 和 C++ 中,int y; 在函数中既是声明又是定义。

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

关于c - 在 C 语言中,为什么多重声明对全局变量有效但对局部变量无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734699/

相关文章:

凯撒哈佛CS50X

c++ - 在 C/C++ 中连接字符串

c - 关于使用 while to "embrace"我的代码而不是调用 main() 的另一个问题

c - 如何使用 malloc 复制字符串

c++ - 如何编写目标为 "errors"的 makefile ?

c - 在 Linux 中跟踪 pthreads?

c - 如何在 C 中声明字符串

python - 如果大小增加,为什么 python 列表的位置没有改变?

c - sched_setaffinity 和 glibc - 交叉编译

c - 定义指向指针数组的指针