|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
& j5 I+ Q" q7 O' emain()# T; O3 ^1 M V) _$ A) B
{1 O) H* t* d: Q
externint y;
! m# W. G5 H; }+ E4 C ......3 y! _/ l6 a P
}5 \7 @ h4 h( \- D d
func1()
5 R$ E* }6 ]4 g* _9 I$ f! T7 d- p{
- b0 z# d& J' g- o, Z7 V externint y;' K7 O) Z0 f$ Y% D7 M' C2 I
......7 F# C2 n* V8 H/ y- Q6 d4 N$ W
}
6 ^& d7 U* m" ^3 G5 [; H0 A6 R+ A; ]int y;
' s( Q `9 G J; v0 X& j, q$ S8 u尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。
: y# v0 a2 _% d* D/ v例如:
- z3 R- g* f8 q( u! P0 Mmain()
. e! [* h; A( `7 H3 L{+ S# h/ r A8 U+ \& \
inti;
i r3 T; x, V voidprintf_out(void);
/ j! i( n) G0 a; Y4 D8 U externfloat height[];% I) g, ]4 x( O/ r/ I! j6 g- f
......
! Q4 t7 K0 x6 V0 c w- k$ q; x printf_out();
/ ^( {: C% x# k. ~}
' U& i" E% H Nvoid printf_out(void)4 R, Y' E) Y, v* q8 [, }
{; r% P" c5 M, d/ S
externfloat height[];
, I, V5 h5 O( j8 Y% E inti;
' ^6 u# r! }4 i ......
8 e7 N3 ~/ F# } N- |, k' R& I}
7 A5 b/ ?% J. ?0 Cfloat height[size];( c b6 m3 b; @& `5 K
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。" T0 i M0 {" q3 U8 d
例如:
- D {! M; [; ^/ }% V, e" d9 _extern float height[main()
. R: Q ^. u1 v9 L{
, S1 D! Y0 J" f5 `! T inti;
2 B# c$ t; z+ Q3 d voidprintf_out(void);; T/ W0 P" v& G# s
externfloat height[];
8 e! O* c! J4 v7 }: U ......
7 |! {4 k3 U3 j# j printf_out(); H( V+ V4 O+ d& `! J7 @& I* X/ ^0 i
}; C* [6 _: {7 d; ?
void printf_out(void)! U- C# w' c- C$ k a6 @7 j s
{' T, V U& ]) ~( n; O$ p
inti;$ t3 Z8 x; M* J4 Y! o0 z; X, U
......
, l% H% w4 S. b}
4 \8 J$ B6 s( v1 mfloat height[size];+ H0 d1 m8 b' d% B" n) w t% R; C
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:) c8 }, u1 w9 z1 g! |5 ?6 y9 x
void printf_out(void);
8 {; y& k# u. k1 ?( \- X4 e! f8 W就等价于:5 N# o7 }- B( i z( U6 k
extern void printf_out(void);2 }0 N8 O9 n% i8 |' L+ \. e
位于所有函数之外的函数声明与变量声明作用相同。 |
|