全局变量与局部变量的重新定义

前端之家收集整理的这篇文章主要介绍了全局变量与局部变量的重新定义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Multiple declarations and definitions3
当我编译下面的代码
  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5. int a;
  6. int a = 10;
  7. printf("a is %d \n",a);
  8. return 0;
  9. }

我收到一个错误

  1. test3.c: In function main’:
  2. test3.c:6:5: error: redeclaration of a with no linkage
  3. test3.c:5:5: note: prevIoUs declaration of a was here

但是如果我使变量为全局,那么它可以正常工作.

  1. #include<stdio.h>
  2.  
  3. int a;
  4. int a = 10;
  5. int main()
  6. {
  7. printf("a is %d \n",a);
  8. return 0;
  9. }

为什么声明相同的全局变量两次不是错误,但是对于局部变量来说这是一个错误

解决方法

在C中,语句int a;在文件制作时,是一个声明和暂定的定义.只要所有人都相互匹配,您就可以拥有所需的许多临时定义.

如果一个定义(具有初始化器)出现在翻译单元的结尾之前,变量将被初始化为该值.具有多个初始化值是编译器错误.

如果到达翻译单元的末尾,并且没有找到非暂时的定义,变量将为零初始化.

以上不适用于局部变量.这里一个声明也作为一个定义,并有多个导致错误.

猜你在找的C&C++相关文章