static函数和变量

转载 2007年10月01日 14:42:00

转自:http://hi.baidu.com/jwjin/blog/item/037fe544bd8fd683b3b7dc3b.html


用static声明的变量在C语言中有两方面的特征:
1)变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。
2)变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

Tips:
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

扩展分析:
术语static有着不寻常的历史。起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。

 

static变量、static函数与普通变量、普通函数的区别

转自:http://blog.163.com/sunshine_linting/blog/static/44893323201191294825184/全局变量(外部变量)的说明之前再冠以static...
  • lcwyan
  • lcwyan
  • 2016年12月08日 13:46
  • 4521

static修饰的变量和函数与普通变量函数的区别

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变...
  • peixuan197
  • peixuan197
  • 2015年09月05日 15:02
  • 1477

Static 变量和Static函数

static变量和static函数 static变量和static函数一、 static 变量 static变量大致分为三种用法1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功...
  • xinfuqizao
  • xinfuqizao
  • 2008年09月21日 20:27
  • 485

static 变量和static 函数

在C语言编程中,static的一个作用是信息屏蔽!比方说,你自己定义了一个文件 -- 该文件中有一系列的函数以及变量的声明和定义!你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可以在...
  • jungzhang
  • jungzhang
  • 2009年10月15日 10:05
  • 421

static 函数和变量

转载自 static 声明的变量在C语言中有两方面的特征:   1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 ...
  • u011306659
  • u011306659
  • 2014年04月24日 15:31
  • 341

static和extern对变量和函数的作用

一.变量的作用域 根据变量的作用域,可以分为局部变量和全局变量  1.局部变量:  1> 定义:在函数(代码块)内部定义的变量(包括函数的形参:函数形参作用域是函数开始到结束)  2> 作用域:从定义...
  • A88410518
  • A88410518
  • 2015年04月18日 22:21
  • 647

C语言中static关键词使用在函数外部和内部的疑惑

C语言static使用过程的一些疑惑在编写嵌入式的程序时,常常遇到static去修饰函数和变量,有时候就很迷惑修饰作用,下面是一点心得记录下来:一、修饰函数假设我们有a.c和b.c两个文件,fun1函...
  • xiaobai2458
  • xiaobai2458
  • 2016年07月11日 14:06
  • 1506

C++静态变量、临时变量、性能分析

现在有这个疑问,我有一个功能函数需要频繁调用,这个函数里面的临时变量比较多,我担心这么多的临时变量在这个高频调用的函数里面会影响程序执行的效率,我想将这些局部临时变量改为局部静态变量,不知道这样做能不...
  • u012861978
  • u012861978
  • 2015年05月07日 16:12
  • 693

C语言的一个关键字——static

 C语言的一个关键字——staticStatic在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数。1、Static修饰变量按照作用范围的不同,变量分为局部变量和全局变量。如果用static修...
  • 21aspnet
  • 21aspnet
  • 2007年03月20日 22:11
  • 12448

C/C++---static函数,static成员函数,static变量,static成员变量 再来理一理

首先说一下内存的五个区: 栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值(除static),其操作方式类似于数据结构中的栈。 堆(heap):一般由程序员分配释放,若程序员不...
  • FreeApe
  • FreeApe
  • 2016年03月25日 14:23
  • 1936
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:static函数和变量
举报原因:
原因补充:

(最多只允许输入30个字)