在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。
& ?/ b. ]6 o' E1 i' m' f3 N, m1 V1 B7 o 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。: o3 D# J7 j G1 c) [ B
下面是a.c的内容
" L+ b D7 z/ h) e char a = A; // global variable* T7 F$ }2 `3 f2 ]5 y) a K
void msg()
' N1 B6 y! }$ i; `9 w4 r, Q8 H# f {
7 g o$ u- J, _: ~ printf(“Hello\n”);5 @. L; `+ T2 r! G
}9 K5 ]0 }% E$ T
下面是main.c的内容
2 l6 d( y, @! p3 h# \ int main(void)$ \! {! B+ J3 Z( U! N4 Q! q0 U
{: l& R: ^1 o( J: F# ?) s
extern char a; // extern variable must be declared before use
* M" ~; Y1 V% r3 u- b. N$ ? printf(“%c ”, a);
" g2 N& ?" ~1 X2 q( [9 ? (void)msg();( v+ _% W1 f$ Q) u8 s' l
return 0;- U7 e6 o, w( O
}) v/ T5 ^' ~1 I Q4 f6 \ J
程序的运行结果是:
) {: W* T, z5 \3 V A Hello
! e9 S `3 K9 }: }; i& P) Y0 x 你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。 |