|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
; R9 G7 z& y6 Q# emain()6 M. F8 ~, i2 Q% x5 h& I1 m p# u
{
; Q: y1 K, ]1 V externint y;% ~' u0 B7 h3 V5 s
......' y+ O" E3 b5 [, i. C
}+ i/ g2 ]/ S7 H5 ?: z# C6 _! ]3 r+ ^/ x3 F& X
func1()9 {3 h z' `! N6 _- @
{" B, P+ h1 o' h- x# e8 x9 o9 U
externint y;
- U$ q0 x/ F6 s' B5 m. } ......
+ k" {/ x$ V* Q B" r}
* L3 n) F4 d. ]1 M0 u) ^+ fint y;
; f, S2 I, n* ~5 l: E尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。2 W( q( C( n1 z% B
例如:
8 C: f# B- h7 |: T- K; Qmain()2 q0 `/ A) e3 E5 e$ j3 B
{" E6 M2 Z8 i" @) S0 I
inti;
1 X+ c) b" P! ? i. h3 l5 [9 R voidprintf_out(void);
) H* `+ R0 O# A' B% n% r externfloat height[];% s' Q9 W7 ~% k4 M" G: j/ V4 B
......6 [) b: g8 r! a) n
printf_out();, q( L3 z$ h" z
}
! J. E0 a4 ] R9 j) z/ Dvoid printf_out(void)8 [" s6 P& F" l8 l+ k" _
{
! S3 z1 }4 O: ?; @ externfloat height[];# q6 J, W; H% _
inti;
8 B9 {& a: H; z' \) H! B/ Z8 N ......
1 r3 ~* R6 k' B2 |+ h' R+ ~}9 M3 {8 y( v8 X y% ~, r5 q
float height[size];
( B; c3 s% K, b6 R0 H# g函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
7 J6 _( t( b( M. q/ w9 G例如:0 \; J( r4 F& M7 q5 ~4 h
extern float height[main()
" u6 Y; {* m6 q, v{
' N3 S/ q: u$ @$ M$ F& `8 V" C inti;
0 D5 E+ N- n1 E4 p, @& }! X voidprintf_out(void);4 H4 b* Q; [' L$ ]' _! s/ h
externfloat height[];
. I$ e% |- C) d0 Z2 ? ......% e6 S/ f$ p. |4 H2 b, b
printf_out();
( P: ~ p( V5 c7 j, J9 u}3 W' h# P( k8 i2 E; T
void printf_out(void)' U8 B) G! J0 _3 q3 v6 U
{
, d5 R* c8 g! W9 b- x" S% ?. u6 D inti;
0 e/ A! L1 t: B4 o$ E. J ......+ K# _$ U* h. U- A, z
}! L& N% [3 j8 T
float height[size];4 ?' T, Y# p/ o$ P3 |6 P( A3 g. }
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
- v( q& S6 W+ `void printf_out(void);. B |8 W8 w: w. s! `/ S6 L
就等价于:0 C$ l: F$ A! L0 Q0 P
extern void printf_out(void);
/ h H' ^4 `$ A* B# M位于所有函数之外的函数声明与变量声明作用相同。 |
|