extern & static

extern

  • 修饰函数声明,说明函数定义在其他文件中;
  • 修饰变量声明,说明变量定义在其他文件中;
  • C和C++互相调用彼此的函数,要使用extern(C++支持重载,函数名重整和C不一致),详细规则如下:
//.c中定义,.cpp中调用
//.c
extern int f();
int f()
{
    //...
}
//.cpp
extern "c" int f();
//后续使用即可
//.cpp中定义,.c中调用
//.cpp
extern "c" int f();
int f()
{
    //...
}
//.c
extern f();
//后续使用即可
//如果在.h声明,则.c文件包含该.h的时候,后续会被.cpp调用
//在.h文件的头上标注下方内容,在.cpp中直接包含.h即可
#ifdef __cplusplus
#if __cplusplus
extern "C"{
 #endif
 #endif /* __cplusplus */ 
 …
 …
 //.h文件结束的地方
 #ifdef __cplusplus
 #if __cplusplus
}
#endif
#endif /* __cplusplus */ 

static

  • 修饰全局变量,修改作用域,在本.c文件中可用,隐藏实现,全局变量的初始化在main函数之前,但是彼此的顺序不保证
  • 修饰局部变量,修改作用域,修改生存期,静态内存中存储,仅在第一次进入函数的时候初始化一次;
  • 修饰函数,修改作用域,在本.c文件中可用,隐藏实现;static函数在内存中只有一份,非static的函数每次调用的时候会产生一份;

一般来说,编写1个模块,1个.h和1个.c,对外接口函数不用static,其他函数使用static修饰,不用static修饰的函数,在.h中声明,同时提供给其他模块调用,使用static修饰的函数在.c上端声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值