|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。- w- S1 n9 I9 D* P
main()
( ~+ S; ]* G" l6 D{
) D# @' J0 e3 o6 T% W; y externint y;% f3 A' L6 t6 N
....... @3 D+ Y; L# m5 C; j: w
}. F# [( K, B# |' s' f8 W; E1 \& }8 v. Y
func1() n/ _3 p2 [: g3 H2 y, u. f
{1 b. U8 F4 L0 G8 z
externint y;2 t! K. s: c9 `% P7 y; I
......" u" S3 V; K3 Q9 \- D9 G
}
9 S3 [ p( _/ b1 _ Cint y;: a& e8 _' C* p+ ~4 X
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。+ O H% [. _2 G4 p4 _" o: Q5 B
例如:$ {9 W9 r0 N$ p' F- j% n3 s' g
main()
* n3 a- a6 z! U7 i( v0 M' K8 y$ i{
/ S& h3 p9 r1 z9 v5 J9 t" \% B inti;6 L( U: a: O7 t7 |# ^; t" J
voidprintf_out(void);! u# j3 h1 ^- U7 a* J
externfloat height[];0 o8 ^3 _8 P# Z; t1 q, P' k
......8 S' Z$ A+ x( m% s( _( K
printf_out();
. W/ r& X1 ~+ U6 w6 ~' |}! V, D7 X4 e! }2 t6 K
void printf_out(void)
1 ~; `- C' E7 ^3 f$ r' F" v0 b; z{) I d; h: r k, \6 r
externfloat height[]; C& ^& F. ~; q0 g8 s. W2 q5 Z
inti;# O$ v z6 L# B8 X* F
......
/ y: n; I: T* R! o+ L}, ]* h; ?% _: G \7 @" t
float height[size];
6 M6 g. h; z) u# J函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。0 ~! m E* o4 n5 z! R" U2 o2 T
例如: H9 u' N0 b i9 ~. Q- h
extern float height[main()- G% ]: L% [1 b. Z6 W: T/ F ~
{' K% E4 W9 V6 V- ~. |4 l% Q1 D) K
inti;
2 p' S0 _5 s. s' u voidprintf_out(void);- D0 h, ^& h- ~" U
externfloat height[];
1 _. B* _( O0 ?7 Q5 u ......
% S' M# j. ]% Q& w& u6 b, C6 E printf_out();
3 [: a7 w: V0 H" G6 ] \9 I+ [, y}
( O1 i/ G l K0 x3 ]4 lvoid printf_out(void)" Q+ P9 u0 t5 o
{ e9 P" a- L p- A9 R2 f( d/ i
inti;
8 L' i/ r' }$ A9 F" o ....... d4 Y3 H9 v b! p( _ }
}
! y! c4 P7 y/ P/ G4 Ffloat height[size];1 p7 F3 A0 Y. c: o' R! Z
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
; F; E2 t" W D; Z! D7 i$ Tvoid printf_out(void);
2 U# w# q6 {$ S J& U0 T2 T就等价于:! j1 |( Z4 `3 S
extern void printf_out(void);
% G- @/ z5 C i8 e3 ]! B位于所有函数之外的函数声明与变量声明作用相同。 |
|