c - 为什么不允许全局变量重定义?

标签 c memory global-variables redefinition

#include<stdio.h>

int i =0;
i=2;

int main(){

    // some Code here
    return 0;
}

错误: /Users/vaibhavkumar/Documents/C/primeFactors.c|4|错误:“i”的重新定义|

  1. 为什么在 C 中不允许重新定义变量。
  2. 全局变量存储在数据段(内存区域)中,与存储静态变量的位置相同。为什么可以重新声明静态变量?

最佳答案

那不是重新定义,而是赋值

赋值与 C 中的初始化不同,并且不能在函数外完成 - 在那个上下文中没有执行线程,那么什么时候完成?

在这方面,具有 static 链接的变量与全局变量(具有 extern 链接)没有什么不同,但是静态链接变量是本地一个单独的编译单元,并且在外部不可见。如果您在不同的编译单元中声明两个同名的静态变量,它们是完全独立且不相关的变量——它们甚至不需要是同一类型。

请注意,静态链接静态存储 不同,但它们使用相同的关键字。所有全局和静态链接变量都隐式地具有静态存储类,但是声明为静态的函数局部变量具有静态存储类 - 即它始终存在 - 就像一个全局的,但只是本地可见。

关于c - 为什么不允许全局变量重定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702567/

相关文章:

ios - 将图像设置为全局变量(在 Swift 中)

linux - 进程和线程与虚拟内存有何关系

javascript - 限制变量数量-Javascript

c++ - 在事先不知道总大小的情况下写入变量

c - 如何在 Bison 中解析 HEX 数字

c++ - std::string 是否总是需要堆内存?

c - 为什么 `realloc()` 在某些神秘输入上失败?

javascript - 附加到回调函数时变量未定义(Javascript/Dojo)

找不到最大的奇数

c - 如何在 C 中仅将字母字符扫描到数组中?