static 关键字
static
修饰的全局变量和函数只能在本模块中使用,不能在其它的模块中使用。因此,当一个函数或变量只能在本模块中使用时,不能用 extern “C”
关键字修饰,用在其它的文件中调用。
当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。其它的文件中可以调用该函数和变量。加了static关键字后,相当于做一个隐藏的作用,只对当前调用的文件有效。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。
-
比如
a.c
文件中定义了一个全局的static int num = 100;
变量 和static int add()
函数,此时变量和函数只能在a.c
文件中调用,你要想在b.c
中调用变量和函数,你是行不通的,编译会出错。 -
那么你想在
b.c
、d.c
、m.c
等多个文件中调用全局变量和函数,要怎么办了? -
办法就是:你需要将变量或函数用
extern
关键字进行声明,并且不用static
关键字修饰。注意是声明,而不是定义。extern int num;
和extern int add()
,这样操作过后,在b.c
、d.c
、m.c
等多个文件中,你就能使用这个变量和函数了。