|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
- u3 U+ S+ y8 m1 L: p+ x- M/ w1 }" [main()0 E1 @. P# k% s
{
: n8 J1 y+ |7 t& H externint y;6 g( c2 K0 `9 s, B" {
......
/ q/ H& \$ S4 R, P* b6 p a}; c8 \9 c' X' Z6 S. E( H
func1()
) n; @8 ?6 J4 p' r: A{
2 k. E3 R$ i, G/ Q externint y;
. }! C! k- n+ [4 U5 i+ ?7 Y4 A l l ......6 L, s4 x+ b9 R) l% U) ~ J3 Y% Q. Y
}
, P6 C5 }$ R6 b8 x7 L. v, f/ Dint y;$ h' F5 D: b }, f) x( ~1 T
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。
" W& @1 h1 {$ `2 F+ d1 L2 T例如:
$ N2 w9 R. Z- x) O bmain()% `9 y# u% ?! f' p6 v6 q
{. d( u4 s; ~/ `5 R# Y7 p S
inti;
' Q) Q6 k# s' y, N8 v; G5 E voidprintf_out(void);
4 n9 u& E0 u3 F; V4 z* U) f externfloat height[];8 Z1 j% n8 L+ T! b6 n: h3 s, E
......- D' l" Q; O! ~5 Z3 `. `
printf_out();, k- U' S; k. K, C% f/ r
}7 J3 Q1 I6 S- q& J
void printf_out(void): k' R. R: t4 S. c
{
( z! x0 z6 |) J. Z* q! Q0 X9 e externfloat height[];
" P' ]. \5 R- T+ j/ G4 R9 Y0 X. Q inti;4 q; y/ V) Z0 W8 g; h! a2 D
......
. o l8 f6 @ ]8 }! ?' L8 e}4 W& {+ `8 i$ S( O
float height[size];( a/ g: R4 r- `6 B! X5 ^6 H! I
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
. ~$ a$ E; X% ] G例如:
/ }6 F, S3 }7 I" Q5 Uextern float height[main()
5 ^# x8 C4 \8 c9 O& \{
) e1 D4 a, ?! E- o. _ inti;1 I/ D, S R1 J1 M( Y. Y( c( ^
voidprintf_out(void);- l, ~. L, _( g
externfloat height[];1 ]) Y3 U Q$ C; ], o
......! G, e& q# A ~$ q
printf_out();
/ Z, n. U4 P M1 f' R1 C* W6 \# z}
. X1 Q2 _. S [& M- h' b% `8 a: Pvoid printf_out(void)" L/ P3 j( F; |0 O
{
! F$ {# G$ r6 y) }* b inti;
0 p) c1 l7 q2 R+ {2 T; P# z% C ......% Y. q8 j( A) v n/ Y3 {
}0 S6 h8 c) d& N* M' o7 L
float height[size];
& b5 u* J2 ?# z- G' f) H/ Y1 }1 Y定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:$ L1 k: W# |3 l$ I& F2 n3 W( @
void printf_out(void);
1 x2 H# V. t+ I9 z# M# K% z就等价于:. g. x4 O, g* }5 j, U- ~
extern void printf_out(void);
( c; Z' ^0 y. X位于所有函数之外的函数声明与变量声明作用相同。 |
|