C语言中static 函数

在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对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值