您的位置:首页 > 其它

static和extern的用法总结

2016-09-25 21:24 316 查看
static用法见:
1、http://www.cnblogs.com/yezhenhan/archive/2011/10/31/2229724.html
2、http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_5297.html

extern用法:
1、http://blog.csdn.net/cameracanon/article/details/4061419
2、http://blog.csdn.net/liu1028701143/article/details/7359381

简单地理解static:

(1)如果static放在头文件中的话,被2个不同的cpp文件分别引入时,那么这两个cpp都有一个自己的这个static变量,并且相互不受影响。

(2)static用来修饰全局变量时,只能被本文件引用,不会被其他文件访问和修改,其他文件可以定义相同名字的变量;
(3)static用来修饰函数时,只能被本文件引用,不会被其他文件访问和修改,其他文件可以定义相同名字的函数;
(4)static用来修饰局部变量(即某个函数内部的变量)时,退出函数时,该变量仍保留着相应的值;
例如:

void count();

int main()

{

   int i;

   for (i = 1; i <= 3;
i++)

   
 count();

   return 0;

}

void count()

{

   static num
= 0;

   
 num++;

     printf(" I
have been called %d",num,"timesn");

}

输出结果为:

I have been called 1 times.

I have been called 2 times.

I have been called 3 times.

简单地理解extern:
(1)extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
(2)extern用在变量声明中常常有这样一个作用,你在*.c文件中定义声明了一个全局的变量,这个全局的变量如果要被其他x.c文件引用,就放在*.h中并用extern来引用声明,然后再x.c中包含该*.h头文件。

(3)(个人规则)函数的定义声明带不带extern其实都表示同一个意思,即不带时默认是extern的,所以一般定义声明时不带extern。

(4)(个人规则)函数的引用声明必须带关键字extern,暗示这个函数可能在别的源文件里定义,没有其它作用。

(5)如果定义函数(函数的具体实现)的c/cpp文件在对应的头文件中声明了所定义的函数(头文件中该函数前可带可不带extern),那么在其他c/cpp文件中要使用这些函数,只需要包含这个头文件即可。如果你不想包含头文件,那么你要在其他c/cpp中使用extern声明该函数(仅仅表明这个函数可能在别的源文件里定义,没有其它作用)。如下所述:

first.h头文件内部:

#ifndef Function

#define Function

void count();

……

#endif

 

first.c文件内部:

#include "first.h"//count()函数的声明

……

void count()

{

……

}

 

//如果不想包括头文件,second.c文件内部:

extern void count();//表明是其他文件里面的函数

 

//包含头文件,second.c文件内部

#include "fisrt.h"//这个就包含了 void count()函数的声明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: