C语言中为什么不可以在同一作用域中重复定义,而在不同作用域中却可以(新手,不懂编译原理)?

这个相同变量名的外部变量和局部变量为什么会有这个“覆盖”,两者不是有作用域交叉吗,不是重复定义吗

举例:大括号可以是函数,也可以是语句组合

int a=1;

void main() { int a=2;

  if ( a==2 ) { int a=3;

    { int a=4;

    }

  }

}

以上定义了不同作用域中的重名变量,等于1的那个变量a的作用域是全局,称为全局变量,在程序中没有局部定义变量a的情况下就是访问这个变量

等于2的变量作用域为main函数范围,是编译程序定义另一个变量,意思是在main函数中凡是遇到变量a的情况下,不会去访问全局变量a,而只会访问这个等于2的变量

在条件语句中的a也差不多,条件满足时程序中用到的a一定是等于3的这个变量

同理等于4的这个a,出了反大括号即失去作用,变量被放弃

在读程序时仅关心最内层的作用域范围,出了范围就失效,并且虽然变量重名,但编译程序会开始不同的独立变量给你使用,相互不会干扰,在实际运用中遇到的比如:每个作用域都用变量i做循环变量而不会相互干扰。

在同一作用域下不可以定义重名变量。

温馨提示:答案为网友推荐,仅供参考