<C语言>static与extern关键字
2017-10-07 20:27
218 查看
转载自:http://blog.csdn.net/mr_raptor/article/details/7211267
乱世枭雄:static与extern
描述:在C程序世界里,不同代码国度以.c文件为国界分隔开来,在单个国家(C源文件)里有不同的函数占山为王,军阀割据,每个C程序世界里只有一个君主main和其首都(main函数体),main通过下传圣旨(参数),调用各种军阀(函数),来掌控整个C程序世界的有序运行。在和谐世界的幌子下,却是别番风景,某军阀(函数)心怀叵测,不想单纯听从于main的指挥与调度,树立了自己的政权旗帜static。static不用听附与main的调度,自己做主,私藏金库(空间)。而main对此却很无奈,因为相对static来说,extern更是让它皇权难保。不同的国家(不同的.c文件)之间通过extern相互私通,传递信息。二者联合作乱,让编程者逻辑混淆。当然,如果编程者连一个国家都没有走出去过(指将所有代码写到一个.c文件里),不能够上升到一个宏观的角度,将不知所云。乱世出枭雄,切听我慢慢道来其中一二。
作用:简单来说static修辞变量,就是指该变量空间独立于函数中的auto变量或叫栈变量(请查看auto关键字章节),static变量空间在内存中的静态区内被分配。如图xxx所示。
图xxx 程序内存分布示意图
在使用static的时候一定要注意以下两点:
1. static变量在程序运行(main启动)之前就已经被分配,它不像是局部变量那样动态在栈上分配的,它在程序彻底退出之后才被释放。
2. static变量有访问权限,在子函数里声明的static变量,只能在该函数内访问,如果static变量在函数体外声明,它的访问权限就是本文件内。
3. static不仅可以修辞变量,还可以用来修辞函数,如果用来修辞函数,和第2条有着相似的意义,表示该函数访问权限限制在本源文件内。
记住以上三点,可以解释很多初学者不明白的问题:
为什么子函数里声明的static变量,每次访问其值都是上一次的结果?答案见要点1。
为什么子函数里的static变量不能在子函数外面访问?答案见要点2。
如何避免不同文件里命名冲突的问题?答案见要点3。
带着上面的理解,再回头理解描述里的小故事:乱世枭雄。
extern是指,当前变量或函数不是在本源文件内声明的,它是外部变量或外部函数,正所谓“外来的和尚会念经”,能很好的体现extern的价值。当我们在本文件里试图引用一个外部声明的全局变量或函数时,可以在其前面加上extern,表示它是外来和尚。
宏观理解:通过上面的分析看来,C程序里,通过函数将功能区分开来,每个函数完成一个功能(这也是为什么函数的英文叫function),而又将一片相关联的功能集合在一个源文件里,这些功能和相关联的功能之间通常要有联系,而这种联系(亦可叫通信)就是通过static和extern进行联系起来的,当然这里面还要有头文件的功劳,关于头文件的解释,后面会单独拿来分析。
常见错误理解:
菜鸟:static表示常量。
你要这么说const关键字哭了。static不表示常量,理解它就从上述3点来理解。
菜鸟:static表示其值会被记录住。
这么说只是片面理解。
++++++++++++++++++++++++++++++++++++++++++
《C语言深入理解系列 - 乱世枭雄:static与extern》
查看其它博文请关注原创作者。
本文系本站原创,欢迎转载! 转载请注明出处:
http://blog.csdn.net/mr_raptor/article/details/7211267
++++++++++++++++++++++++++++++++++++++++++
乱世枭雄:static与extern
描述:在C程序世界里,不同代码国度以.c文件为国界分隔开来,在单个国家(C源文件)里有不同的函数占山为王,军阀割据,每个C程序世界里只有一个君主main和其首都(main函数体),main通过下传圣旨(参数),调用各种军阀(函数),来掌控整个C程序世界的有序运行。在和谐世界的幌子下,却是别番风景,某军阀(函数)心怀叵测,不想单纯听从于main的指挥与调度,树立了自己的政权旗帜static。static不用听附与main的调度,自己做主,私藏金库(空间)。而main对此却很无奈,因为相对static来说,extern更是让它皇权难保。不同的国家(不同的.c文件)之间通过extern相互私通,传递信息。二者联合作乱,让编程者逻辑混淆。当然,如果编程者连一个国家都没有走出去过(指将所有代码写到一个.c文件里),不能够上升到一个宏观的角度,将不知所云。乱世出枭雄,切听我慢慢道来其中一二。
作用:简单来说static修辞变量,就是指该变量空间独立于函数中的auto变量或叫栈变量(请查看auto关键字章节),static变量空间在内存中的静态区内被分配。如图xxx所示。
图xxx 程序内存分布示意图
在使用static的时候一定要注意以下两点:
1. static变量在程序运行(main启动)之前就已经被分配,它不像是局部变量那样动态在栈上分配的,它在程序彻底退出之后才被释放。
2. static变量有访问权限,在子函数里声明的static变量,只能在该函数内访问,如果static变量在函数体外声明,它的访问权限就是本文件内。
3. static不仅可以修辞变量,还可以用来修辞函数,如果用来修辞函数,和第2条有着相似的意义,表示该函数访问权限限制在本源文件内。
记住以上三点,可以解释很多初学者不明白的问题:
为什么子函数里声明的static变量,每次访问其值都是上一次的结果?答案见要点1。
为什么子函数里的static变量不能在子函数外面访问?答案见要点2。
如何避免不同文件里命名冲突的问题?答案见要点3。
带着上面的理解,再回头理解描述里的小故事:乱世枭雄。
extern是指,当前变量或函数不是在本源文件内声明的,它是外部变量或外部函数,正所谓“外来的和尚会念经”,能很好的体现extern的价值。当我们在本文件里试图引用一个外部声明的全局变量或函数时,可以在其前面加上extern,表示它是外来和尚。
宏观理解:通过上面的分析看来,C程序里,通过函数将功能区分开来,每个函数完成一个功能(这也是为什么函数的英文叫function),而又将一片相关联的功能集合在一个源文件里,这些功能和相关联的功能之间通常要有联系,而这种联系(亦可叫通信)就是通过static和extern进行联系起来的,当然这里面还要有头文件的功劳,关于头文件的解释,后面会单独拿来分析。
常见错误理解:
菜鸟:static表示常量。
你要这么说const关键字哭了。static不表示常量,理解它就从上述3点来理解。
菜鸟:static表示其值会被记录住。
这么说只是片面理解。
++++++++++++++++++++++++++++++++++++++++++
《C语言深入理解系列 - 乱世枭雄:static与extern》
查看其它博文请关注原创作者。
本文系本站原创,欢迎转载! 转载请注明出处:
http://blog.csdn.net/mr_raptor/article/details/7211267
++++++++++++++++++++++++++++++++++++++++++
相关文章推荐
- 黑 马 程 序 员_视频学习总结<C语言>----07 static和extern关键字、typedef
- C语言中关键字auto、static、register、const、volatile、extern的作用
- Java关键字final、static使用总结<转>
- 【C语言】19-static和extern关键字1-对函数的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- C语言-static和extern关键字1-对函数的作用
- c语言中static关键字和extern关键字
- C语言中的extern和static关键字详解
- C语言中关键字auto、static、register、const、volatile、extern的作用
- 黑马程序员——C语言的关键字 typedef,static,extern和预处理指令
- C语言学习入门 (七) 变量与函数,static和extern关键字
- C语言中关键字auto、static、register、const、volatile、extern的作用
- c语言中的static和extern关键字
- C语言中的static和extern关键字——【链接属性】和【存储类型】角度解析
- C语言auto、register、static、extern关键字
- final 关键字 和 static 用法<转>
- c语言常用关键字 static,const,extern...
- c语言中的static和extern关键字
- C语言的存储类型和关键字extern、static
- c语言的链接属性和static、extern关键字