静态变量存储位置

时间:2018-02-14 15:19:38

标签: c

如果我们在全局和本地创建一个具有相同名称的静态变量,意味着代码将被编译。但我希望它会给出重新定义的错误,因为静态变量将存储在数据段内存中,但我们不能在同一数据段中创建两个相同的变量。那为什么要编译呢?实际上这两个变量将被存储在哪里?请任何人你能回答......

这是我用过的示例代码,

static int var = 100;

void main()
{
    static int var = 200;
    printf("\n Var:%d\n", var);
}

1 个答案:

答案 0 :(得分:1)

这两个变量即使存储在同一部分中,因为它们的存储类说明符相同,它们的范围也会不同。这就是它们的区别。我们也可以这样做 - 你不要问它是否正常

int main(void){
  int a = 1;
  {
      int a = 2;
  }
}

在您的情况下,编译器将尝试在使用时找到变量var,并将采用将首先找到的变量。在main内,将考虑本地var。但是在其他函数中,如果引用var而没有声明任何具有相同名称的变量,它将访问全局变量。

如果使用此标志进行编译,一个好的编译器会警告你-Wshadow中的gcc选项会告诉你这个。

您应该清楚的想法是 - 不会对同一个变量进行任何碰撞或重新定义 - 它们是定义它们的不同范围。