C语言中使用静态函数的好处

来源:互联网 发布:探险电影知乎 编辑:程序博客网 时间:2024/05/19 10:37

在C语言中为什么要用静态函数(static function)?
如果不用这个static关键字,好象没有关系。那么,用了static以后,有什么作用呢?

我们知道,用了static的变量,叫做静态变量,其意义是,该变量的值在下次调用时,还继续保留前次调用时的值。
这里在一个函数前加上static关键字,其意思是这样的:
原来static函数是“restrict visibility of the function”,即该函数的作用域在另一个文件中是不可见的。
在C++中,函数的作用域一般是局限于其所定义的类中,虽静态函数不常见。在C++,“a static member (function)is part of its class but not part of any object”。

举例来说:
文件file1.c:

void func1( void )
{
}

extern void func2( void )
{
}

static void func3( void )
{
}

文件file2.c:

void func1( void );
void func2( void );
void func3( void );

int main( void )
{
 

func1(); 
  func2(); 
  func3(); 
  return 0;
}

在Cygwin下(或Linux下)用GCC编译:
  $ gcc file1.c file2.c
。。。 file2.c:(.text+0x35): undefined reference to `_func3'
这个错误信息表示func3没有定义,即它在file2.c中不可见。

 

 

  静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

c语言中static的语义

1.static变量:

1).局部

a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。

b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。

2).全局

  全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用);而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

2.static函数(也叫内部函数)只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。

区别于一般的非静态函数(外部函数) static在c里面可以用来修饰变量,也可以用来修饰函数。 先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含对,不要弄混。

原创粉丝点击