|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。9 y* C1 ?* \' J
main()
: b2 \) Y7 U( F{4 n4 _; q/ v% z f
externint y;. r7 Q. ]+ S# d9 ] n4 K
......* `" Y" F. H' F# D. Y# L3 R
}, z" a$ u9 c! y- A% Z. c
func1()
/ s8 h! k( R1 p1 E{( D1 U# e* r) G, G- G' D. {4 I @
externint y;8 R2 P7 {/ J+ i7 P" R) F9 y
......0 |0 ?! |; Z- [6 k- q9 r0 A
}/ l5 z) s1 X6 S
int y;5 f8 j" }& T6 ~& C( F/ t
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。$ y) N+ a" b4 s. @" S5 e0 f" s
例如:
( K' s6 J$ o! m# cmain()
9 e/ o; i8 O! W; T( j{
! ?/ f3 P! P$ ?2 }( ~5 n! x( t inti;
2 F5 c% {" I5 n4 Q voidprintf_out(void);
% ]( [) r; f: ~/ h5 [) c( O# F$ ]% k externfloat height[];! e; D- L4 ~" f6 O) `
......9 R0 y; l, V8 z4 \ L; ]7 }& Y9 l& P
printf_out();( l$ {* `( F3 q+ I4 k% |" R4 K
}, ~5 T' p# W9 }! N0 j+ w! E
void printf_out(void)
# g, P- J6 B9 _8 ~! a7 T% ~' R' C{& _5 W8 \1 H- V0 o
externfloat height[];+ E/ ?$ a! F/ W( Y3 F8 o" T
inti;
, a# q% r3 w. g+ y/ F5 } ......5 y6 Y" U3 U% k E5 ^5 N; G
}
1 {1 \# a: K* i0 Ofloat height[size];7 W3 H- ~7 E4 P# \ T, Y" }
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
6 U+ A, z+ G: u2 X( B# F2 ?例如:
$ m# f6 x( K3 O. textern float height[main()
: x; u3 o% r: z1 G{5 O) t& ^% \2 Q, J
inti;
$ [9 B' f8 z, s voidprintf_out(void);5 d8 A1 R2 `8 [- ]1 Z7 s8 _# q
externfloat height[];# t: G0 y6 M- S2 G* K
......
0 ^3 f( w. s2 b printf_out();# G5 f, L' h2 g4 U9 f
} R5 u! j0 h! Q, w; @6 D5 u& j
void printf_out(void)& r! }: }; `$ g
{2 ^: v0 A" Y5 v$ f
inti;6 e3 G" Y T& r. ?) j3 c# W) E6 `
......
) q" V& V+ T7 B# E}
+ R- v H1 x9 M4 {float height[size];( x5 Q9 c8 [1 F7 I8 Z* P: v
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
6 o- o% O0 o Z1 dvoid printf_out(void);
7 r# |* T1 M' _( ~. B- h4 h. n+ ]就等价于:- W7 h4 c( H) i* D0 v
extern void printf_out(void);
, v U0 z2 N6 @位于所有函数之外的函数声明与变量声明作用相同。 |
|