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上端声明。