gpt4 book ai didi

c - 重新声明全局变量与局部变量

转载 作者:太空宇宙 更新时间:2023-11-04 04:19:41 25 4
gpt4 key购买 nike

当我编译下面的代码时

#include<stdio.h>

int main()
{
int a;
int a = 10;
printf("a is %d \n",a);
return 0;
}

我得到一个错误:

test3.c: In function ‘main’:
test3.c:6:5: error: redeclaration of ‘a’ with no linkage
test3.c:5:5: note: previous declaration of ‘a’ was here

但如果我将变量设置为全局变量,那么它就可以正常工作。

#include<stdio.h>

int a;
int a = 10;
int main()
{
printf("a is %d \n",a);
return 0;
}

为什么声明同一个全局变量两次不是错误,但为局部变量声明两次是错误?

最佳答案

在 C 中,语句 int a; 在文件范围内创建时,是一个声明和一个暂定定义。您可以根据需要拥有任意多个暂定定义,只要它们相互匹配即可。

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

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

以上不适用于局部变量。这里的声明也作为定义,超过一个会导致错误。

关于c - 重新声明全局变量与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com