|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。" s9 _3 O7 Z! z G
main()
- j& I( p; l* u& I: B{
0 C. a- T6 s! M4 { I externint y;1 o/ f; M& N l. d6 ~) c3 J
......
. W/ B2 ~- r' X. a}
( H; _$ P1 } _8 q8 pfunc1()% \5 [; g1 c8 w4 f( f2 [: j
{. g1 r5 P' |( g. Q' {; r# V. t
externint y;8 D$ V) u- Y/ E _6 q$ P, `2 u' L$ l
......
: m8 M: W" ]3 O8 G% x% M}
; F1 {( o# a# M- Wint y;5 }; z7 H0 }% L7 u: o
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。7 Z9 v+ m$ o t" p( I, h- ?
例如:8 X8 G, v: ]8 C- c7 e# e
main()
4 ~$ h9 ?8 l- r, h! o! P' M& b{
2 o c0 h L" g. s inti;& a+ G9 x8 q t) w' w; r% c: D
voidprintf_out(void);% [" X% V* B2 _6 T
externfloat height[];
8 s7 _" i4 H7 Q; D ....... S) P6 Q1 o: ?
printf_out();
8 g: A( Q4 m+ Y2 v p0 k R}
5 s e) e. Q- e4 I: xvoid printf_out(void)6 }& J* U6 f) f0 s
{
) ^# ]! @7 y& z4 M! V0 |, J& v* X externfloat height[];2 c6 r4 D- `* R% N- d2 ~ h; ]
inti;. N3 t( u6 g& U/ ]: w
......! Z+ f8 U( {0 B, v
}
* t8 e% c' |' z( Nfloat height[size];
* `7 d. x7 e- e& r) v函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
" i& x \7 J; D, J6 m- Z例如:
6 Y) H! j- Z" cextern float height[main()
8 B& |3 T; W# A7 b/ J7 B. O{ X1 @! ~ D- B3 {1 h
inti;
: C, O9 }1 J5 P' Z8 ]" q) | voidprintf_out(void);
7 D6 s3 K3 {3 N/ o3 S externfloat height[];
) E$ M% x7 `7 S% ~: j6 E ......, v& [5 ~2 q- d+ y* ^3 d/ Q7 Z; c
printf_out();, C. X. f- z+ @# b! Q' }
}
) X5 Q1 k! y: c0 I: l: E. kvoid printf_out(void)
7 J/ A( \" Z( v* P4 L{' Z' G* u' W' u$ z# f# [; |8 j
inti; r3 |& ~; ] _/ i
......* W+ m* q& `, _4 o% C( [
}+ s* a1 u5 i1 f+ x5 `
float height[size];
) a& E2 J- k( U定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
2 d! ?! |6 Z T# V' c9 b9 T' ovoid printf_out(void);8 Z, s5 ]! h6 [. i- d. u" N N) r
就等价于:
5 p0 l8 e' L- ~9 y' S" U9 s( iextern void printf_out(void);
2 Q1 f6 X3 S1 ?. w位于所有函数之外的函数声明与变量声明作用相同。 |
|