|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。* |# J8 H2 m3 i: ?+ N
main()( ^, v# @" K5 B+ o+ b+ Q
{
2 y- R3 E9 B; j) ~5 T3 [" u' Y externint y;
& T: u5 Q) w8 ^ ......: y, V7 m2 I: R, n5 Z" ^1 ^
}) g$ E* @, M- n* r
func1()
6 a! s( S9 H }+ U# T{
8 c9 }. O2 e* w0 L" p1 Q* H externint y;
+ K) P2 T% g) P) w R. O8 V ......' x0 ~% d1 d2 A
}8 _# E: J) X# Z2 ?& v
int y;7 t1 B; H5 C6 {
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。
1 B' E N$ L# b& L8 u0 @% N t( g例如:2 H' I8 Y7 ?# Z# U+ e0 u
main()' H7 }- k0 U8 c. [+ j; i' c
{4 p1 z2 k0 ]" }) a* S% {) ?
inti;& T7 A1 ~/ ?( t; i
voidprintf_out(void);* H; }" p% [- }9 v( v
externfloat height[];
8 _# J& E0 c2 j ......6 X2 x& ^: @- }/ t9 D, _( h! K
printf_out();. s) O. u; `6 H; H
}/ N" h4 u1 ]5 k1 \: s, P* }! d
void printf_out(void)
# t( ]5 p5 U: t, \! z{% t( K7 T9 k T
externfloat height[];
& B( i. D* g9 J: X+ O& O- z# |& b inti;
% F+ D% h) \. G C/ m5 P4 A ......7 w! ?$ l2 W m4 L
}5 x, ]; }' x4 c% W6 K
float height[size];$ }3 o7 X1 P; H
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
* ^3 G0 E$ N" T/ ?例如:
4 v R2 J/ s3 z% T! Z% jextern float height[main()
0 i. `: T5 T# ~: I1 q9 p{
l8 C- z! E6 s% A4 k0 P inti;
Q1 C: A9 [7 \8 _* t voidprintf_out(void);
! g* L4 Z0 w2 w+ g7 y externfloat height[];
$ ]" s' E: P4 J8 w. P. ]. W' t ......
. {$ f2 {# s8 C! l: e1 Z+ p) D printf_out();
; W/ [( U% d% N$ `3 x8 t6 j7 _}
" R: m9 ?) A5 B, }1 H- rvoid printf_out(void)
- {( P6 @7 L5 n; D- W7 Z" e8 F8 b4 h/ l9 B' G{4 J; k U. }( R1 n# ]$ N) f( ^
inti;$ {2 s/ b1 D8 `$ Y$ N
......8 L& G( p1 ]0 ^
}
7 e5 {% u' R2 {' ~( X2 yfloat height[size];
3 m8 O0 ?$ _) Z6 k- H; Z" F% P定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:% r5 }4 e8 @; o. ]
void printf_out(void);
- l# t: u) ]: ]4 ?0 C就等价于:6 I3 ?! V# @% ~6 n/ U
extern void printf_out(void);
1 |6 @% V" _# u8 Y* i, G; r1 U位于所有函数之外的函数声明与变量声明作用相同。 |
|