|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。. E) X& b8 W. t% G* a. P
main()* G8 l! G8 m5 H w$ I$ ^% j
{
' M3 \, X0 b: }+ m/ C externint y;
5 ]* ]/ H f* h7 c* g9 Z S3 }: K ......4 N+ }' N( O) o
}7 b' y3 J- o0 x1 Q
func1()
5 A9 A) t4 G$ Y( @5 k- @' ?{
2 _7 n+ w; y; B$ C; d externint y;
5 U5 M& k' i/ t: U ......
+ Z7 [: ?4 r8 ?6 }; u, m7 G}8 U' O9 M# R. A$ a% J
int y;: p1 @ X j( Q1 \) f- W: E; D
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。. X' V; o& l: y. \5 V0 A
例如:6 D! ?" ?& f" I5 F6 H
main()" Z( W( n1 }) Y3 K% O" i# b$ c
{; c( p/ s0 P+ r: @
inti;9 V: V) a% B# i6 T' n
voidprintf_out(void); ~. J2 e% @0 f/ ]" r0 T
externfloat height[]; f6 T3 }. G3 q9 d9 {+ l8 q
......) M5 Q$ {$ |. z# W' q5 A3 p
printf_out();
$ B w$ P; ?: ^9 x" \5 _}6 ]9 Y2 \0 U+ z9 Z! e) S) g# z
void printf_out(void)
! v' E" _0 m$ G& I2 S( d( d) h{
6 } [6 @1 M8 `# h externfloat height[];
+ N- s$ P# l0 M inti;
% s5 N& F+ ?4 M ......
2 _$ y& W; t D7 y& A# l} `/ j& L8 b0 U. j
float height[size]; Z, |0 r. G# t! ?( m+ o$ J- D
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。* G& e9 ^: c5 q! c
例如:
' x8 e- X& b0 T: lextern float height[main()/ {7 @; t. {/ }: h% ?
{
6 \4 a* k* i# H inti;, {6 E; a+ m" c% a/ u( c$ p4 z5 y
voidprintf_out(void);
0 D* T/ Q @3 R" w externfloat height[];
. A5 F4 a# p" _ ......
: C0 W3 ]& q8 ^: I7 t* }2 ]" w printf_out();# |( ?% l5 y( d4 J/ L6 z2 \6 W; ]
}
( T- X: R0 n* y0 f7 c. Fvoid printf_out(void)" \$ m! ~4 |5 f$ N/ P$ l( X4 J8 A" T
{, n& \' i) k, W+ ]0 {. ^9 |
inti;3 _# ~7 _6 @3 r0 L$ p
......8 \% X1 d: @: |9 ]- e5 x
}
" O- P5 m1 ?, K$ u* P; ?5 V$ s$ Ffloat height[size];
Z2 j; i, n3 \9 Z定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:! T# a3 D, @/ o( y2 |
void printf_out(void);
, u# x! R- [0 \) G就等价于:
- O# {! V# f sextern void printf_out(void);
3 B7 v9 [3 d. Z) j2 y位于所有函数之外的函数声明与变量声明作用相同。 |
|