在C语言同一作用域内能否声明多个同名变量?
在C语言同一作用域内能否声明多个同名变量?
嘿,这个问题C语言标准里说得明明白白——同一作用域内绝对不允许重复声明同名的变量。
拿你贴的这段代码来说:
#include <stdio.h> int main() { int a; int a; int a; }
你把这段代码拿去编译,编译器立马会报错,错误信息大概是redefinition of 'a'(变量a被重复定义),根本过不了编译这一关。
为啥会有这个规则?
其实很好理解:同一个作用域里的每个变量标识符必须是唯一的,这样编译器才能准确识别你后续代码里用到的a到底指的是哪一个。要是允许重复声明,编译器直接就懵了,根本没法处理这种歧义。
有没有例外情况?
倒也有个特殊场景:如果是用extern做引用声明而非定义,在C语言里是允许重复的,比如:
extern int a; extern int a;
这是因为extern声明只是告诉编译器“这个变量在其他地方已经定义好了”,并没有给变量分配内存空间,所以重复的extern声明是合法的。但你代码里的int a;是定义式声明,会直接给变量分配内存,这种重复是绝对不被允许的。
内容的提问来源于stack exchange,提问作者msc
相关产品推荐
相关产品推荐

