码迷,mamicode.com
首页 > 其他好文 > 详细

static关键字分析【转】

时间:2016-11-26 11:27:02      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:ring   无法   表示   关键字   str   历史   img   cpp   oba   

本文转载自:http://flyingcat2013.blog.51cto.com/7061638/1564695

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错。伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。

关键字static有着不寻常的历史。起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。

 

一、静态全局变量

一个典型的进程在内存中的布局类似于这样:

技术分享

在进程运行过程中,BSS和DATA段内的数据始终存在。静态全局变量和其他全局变量的存储地点没有区别,因此还是在BSS和DATA中。但是,静态全局变量仅在定义它的源文件中有效,其他文件即使用extern声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它。想要使用就得在前面再加extern ***。恶心吧?要想不恶心,很简单,直接在文件顶端定义不就得了。

 

二、静态局部变量

静态局部变量还是存储在静态区中,不过其范围更加局限,仅在定义这个变量的函数中可以使用。同一个源文件中的其他函数无法再使用这个变量。由于总是存储在静态区,因此函数返回之后变量不会被销毁,下次使用的时候变量值仍然存在。可以利用这个性质做计数等工作。

 

三、静态函数

在函数返回值前加上static关键字的函数就成为了静态函数,但这个“静态”不是指存储方式,而是限定仅在这个文件中才能访问该函数(所以又称内部函数 )。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。一个很好的类比:可以想象为面向对象编程语言中的private函数。

最后综合下三种static的写法:

1
2
3
4
5
6
7
     static int globalVar=1;
     void func(){
         static int localVar=0;
     }
     static void printDebugInfo(){
         printf("Hello World!");
     }

 

static关键字分析【转】

标签:ring   无法   表示   关键字   str   历史   img   cpp   oba   

原文地址:http://www.cnblogs.com/zzb-Dream-90Time/p/6103597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!