gpt4 book ai didi

c - 了解 C 中的 `extern` 存储类说明符

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

考虑给定的 C 代码:

#include<stdio.h>
extern int i;
int main(){
printf("%d", i);
return 0;
}

它给出编译错误。而如果我初始化 extern int i=10; 则输出为 10

#include<stdio.h>
extern int i=10; //initialization statement
int main(){
printf("%d", i);
return 0;
}

此外,如果我分配 int i=10;,则输出为 10

#include<stdio.h>
extern int i;
int i=10; //assignment
int main(){
printf("%d", i);
return 0;
}

#include<stdio.h>
extern int i;
int main(){
int i=10; //assignment
printf("%d", i);
return 0;
}

变化:

#include<stdio.h>
extern int i;
int i=20;
int main(){
int i=10;
printf("%d", i);
return 0;
}

因为 int i 是局部变量,所以输出是 10

Please, can you explain some important point about extern storage class in C


我在某处读到,声明声明了变量或函数的名称和类型。定义会导致为要定义的变量或函数体分配存储空间。同一个变量或函数可以有多个声明,但该变量或函数只能有一个定义。

最佳答案

考虑

int i;

在程序的所有函数之外声明,包括 main

这意味着 i 将有

  • 文件范围
  • 静态存储时长
  • 空间已分配给 i。 #这很重要。

考虑

extern int i;

在程序的所有函数之外声明,包括main
这意味着 i 将有

  • 文件范围
  • 静态存储时长
  • i 仅声明,未定义,这意味着未分配空间。
  • i 假定在其他地方定义,可能是在包含文件中

考虑

extern int i=10; 

在程序的所有函数之外声明,包括main
在这种情况下,您正在初始化 extern 变量 i。在这种情况下

  • i 分配了空间。
  • i 将被初始化为 10
  • 关键字 extern 被忽略,这意味着 i 不是 仅声明

注意

对于extern int i,必须在别处定义变量,即在另一个源文件中。如果不是这种情况,您将出现编译时错误。

关于c - 了解 C 中的 `extern` 存储类说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38280895/

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