static和extern的用法总结

来源:互联网 发布:各个朝代的疆域数据 编辑:程序博客网 时间:2024/04/29 06:24
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(" Ihave 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()函数的声明


0 0