C语言中static 函数

来源:互联网 发布:oracle数据库收费吗 编辑:程序博客网 时间:2024/05/24 04:25

在C里面,所谓 static ,只是限制在当前源文件————这个只是对于编译器/链接器而言。

但实际上,运行时,static和普通的extern 的函数/变量,没有区别。

例如:使用函数指针/变量指针,完全可以访问其他文件的 static 变量/函数


file01.h
int * iptr01;
typedef void (* funcPtr)(void);
funcPtr pfun01;
----------------------------

file01.c
#include "file01.h"
static int ivar01 = 36;
int * iptr01 = &ivar01;

static void hwfun (void);
funcPtr pfun01 = &hwfun;

void hwfun (void)
{
printf("hello world\n");
}
-------------------------

file02.c
#include "file01.h"
............
//在某个代码内
*iptr01 = 72;
//file01.c 中的ivar01  变为72;
pfun01();

//调用了file01.c 中的hwfun ,打印出hello world


函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
定义静态函数的好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突
<2> 静态函数不能被其他文件所用。 存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。

原创粉丝点击