C/C++——static修饰符

 

1. static变量

static 用来说明静态变量。
如果是在函数外面定义的,那么其效果和全局变量类似,但是,static定义的变量只能在当前c程序文件中使用,在另一个c代码里面,即使使用extern关键词也不能访问这个static变量。
如果是在函数内部或代码块内部定义的,那么这个变量只初始化一次,即使再次调用这个函数,这个static变量也不会再次被初始化,于是,这个变量的取值就会一直保存着,也就是说,当你再次调用这个函数的时候,里面用到这个static变量时,就会发现,还是它还是上一次函数调用时的结果。

static变量在没有显式指定初始值时,由系统一律初始化为0(对于指针是NULL)

 

2. static函数

当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。

  • 内部函数(又称静态函数)

  如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
  定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:
  

static 函数类型 函数名(函数参数表)
{……}


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

  • 外部函数:

  外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:

[extern] 函数类型 函数名(函数参数表)
{……}

  调用外部函数时,需要对其进行说明:
  [extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];
  [案例]外部函数应用。
  ⑴文件mainf.c
  

int main()
{ 
    extern void input(…);
    extern void process(...);
    extern void output(...);

    input(...);
    process(...);
    output(...);
}


  ⑵文件subf1.c
  

……
extern void input(...) /*定义外部函数*/
{……}


  ⑶文件subf2.c
  

……
extern void process(...)    /*定义外部 函数*/
{……}

 

  ⑷文件subf3.c
  

……
extern void output(...)    /*定义外部函数*/
{……}

 

参考资料:

  1. https://zhidao.baidu.com/question/586606740.html
  2. 书籍:《C和指针》第二版

 

posted @ 2018-10-17 22:44  怪猫佐良  阅读(702)  评论(0编辑  收藏  举报