问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言里的static和extern的作用是什么?

发布网友 发布时间:2022-04-23 17:16

我来回答

2个回答

热心网友 时间:2022-05-02 06:54

假如有三个文件:a.h, a.c, main.c
在文件a.c中定义一个全局变量和函数:
int i = 213;
void print(void) { printf("print in a.c"); }
在文件a.h中声明这个全局变量和函数:
extern int i;// 加extern声明而不定义,指明这个变量在某处已定义,此处只是做一个说明
extern void printf(void); // 函数原型即是声明,所以此处可以不用加extern明确这是声明
在文件main.c中:
#include “a.h”
int main()
{

printf("%d\n", i); // 直接使用i
print(); // 直接调用print()
}
---
如果将文件a.c中相关定义改为
static int i = 213;
static void print(void) { printf("print in a.c"); }
文件a.h与main.c中内容不变
此时编译出错,报告找不到print()函数,找不到i,这是因为static*print()和i只能在a.c中使用。
===
如果用static修饰局部变量,则该局部变量将拥有全局生命周期,即在程序执行期间都存在,且其值为上一次使用后的值。
int print(void)
{
static int i = 0;

printf("%d",i++);

}
不加static,每次调用print(),输出结果都是0
加上static,每次调用printf(), 输出结果都不同,即:0,1,2,3……追问也就是说static只是把局部变量修饰为全局变量,而extern是表明这个变量的定义不在当前文件是这个意思吗?

热心网友 时间:2022-05-02 08:12

static两个作用:
1.在函数内部声明,表示该变量生命周期为全局,不会随函数的结束而消亡
2.在函数外部声明,表示该变量仅限于当前编译单元内可见,其他文件中不可以引用该变量
extern作用:
表示该变量或函数的定义需要在外部文件中寻找。所有的函数默认都是extern的。变量前加extern则编译器只会为该变量分配一个符号,而不会实际分配空间。在链接时,链接器会在其他文件中寻找这个符号的定义。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孕期有哪些非常重要的检查项目需要特别注意? 百合种植多久收 如何计算百合种植时间 古文《伤仲永》《周处》的字词整理 文言文中常出现的字及意思 ...学生重25千克,4040名学生重1吨.一只山羊重50千克,8080只山羊重4吨... 古文中意思为你的字词有哪些 语文古文中的字词问题!! 文言文中常出现的字及意思 古文中意思为你的字词有哪些 ...长龙鳞很多密宗的师傅都帮我想办法但是还是就要变龙了 男生潮流短发 不要太长刘海 另求一发型 有追加 女人性高朝潮短怎么回事 母鸡是怎么孵出小鸡的? 怎么样孵出小鸡 怎样能孵出小鸡 如何孵出小鸡仔 怎样最快孵出小鸡? 怎么才能孵出小鸡 目前数据线有多少个型号的接口? 信用卡逾期两年有什么后果或者说怎么解决? 2022信用卡逾期金额标的 你好,我信用卡逾期了有什么后过 信用卡逾期后有什么影响 2022年全国信用卡逾期人数 Internet高级选项中tls1.0;TLS 1.1;TLS 1.2 选择哪个好?IE9为何默认最低的1.0? 2345怎样开启tls加密功能 SSL工作原理,SSL加密原理,SSL证书怎么加密 路由器上SS/SSR用什么加密方式及协议混淆能达到最大的速度 如何在 foxmail 邮箱设置 TLS 加密设置 ? ssl tls协议 区别 求2012年男生潮短发 c中static与extern的区别? 女生适合剪的男生发型有哪些? 最新的潮流短句 extern 和static区别 自来卷而且是沙发怎么做发型?? static extern const之间的区别和用法 2011年什么样潮流短发发型好看? static与extern都是什么意思,有什么作用? C语言中 Static和 Extern 的具体用法,有例子最好 2010最潮流短发发型 c语言extern跟static可以一起用吗 求初中女生潮流短发 办理以下证件时对营业执照的经营范围有要求吗?如果有要求的话需要设置哪些经营范围?谢谢! C语言中定义数组时,前面的static、auto、extern三种存储类别有什么作用? 医疗器械营业执照上的经营范围已有一二类 经营范围,还用再去办理经营许可证吗? c++中auto register static extern的用法都有什么区别? 怎样让头发长度不变,看起来变短呢 2013潮流短发,适合头型:上下窄,颧骨高。五官偏小巧,26岁,女 C/C++ static extern的问题