EDA365电子论坛网

标题: [ARM资料] 外部声明 [打印本页]

作者: ygcgsa    时间: 2016-4-28 14:49
标题: [ARM资料] 外部声明
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
! j0 q2 [1 V$ ?7 u3 emain()6 ~. Y9 P( {( V0 Z: l
{1 v( C: v" \( W  S
       externint y;6 a+ D) s' H' I0 L: m( ^; [. Y' W6 q
       ......" Q$ B7 n* Q5 H+ i, B2 V" ^
}
1 n1 R% T% u0 |8 b6 xfunc1()
  {* o( w" H  u; X1 y{
9 b( T' K2 p9 I$ T       externint y;
9 e5 l- y, f" E$ u7 |) U/ ^       ......& I( k  F( V6 G2 f) B5 \( B
}) L# [/ j: P7 X  `9 y
int y;6 M. ~6 z/ o  f+ @
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。# |) s  r7 \2 x' ]
例如:1 R5 b  f# ~  n% [
main()1 g! K5 j( B8 i$ K1 l
{
& J5 X0 q/ k" k- I$ h3 u4 i       inti;5 H( T  k& S, r3 x
       voidprintf_out(void);* Z9 Z1 h" q- k8 }* n
       externfloat height[];2 f5 r: `4 @" O: [1 W
       ......
& }1 s: h8 l* |4 \. v0 t2 ], l       printf_out();
, d2 _+ k' F; P3 x/ Y}4 o4 `' O9 X5 N$ Q. {7 [8 n
void printf_out(void)
) v( k- T3 A* P& A{
# _$ [& o, U) U: O       externfloat height[];
2 q  D" q. T' I5 m       inti;4 \# v$ l- |4 J2 Q. K0 k
       ......
  M- q, m0 M2 b; |( j0 j, g}. n, M, Y& Q: N1 H0 S# i
float height[size];/ K  c. Y1 H4 b9 P) ~7 a. Z
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。, H, @, N7 i$ L3 C- u8 v+ t0 L
例如:
1 {1 T0 Z) D1 mextern float height[main()3 n, H) g# F5 x3 z! X8 E5 h; |
{
$ C3 h$ B  k2 M) P5 C9 s       inti;+ \) D) Z- U7 P3 M, |: R5 D
       voidprintf_out(void);
4 m5 x8 }! K2 p8 X/ H9 A, s       externfloat height[];+ G- O- i  a1 i4 P) ]0 m/ }
       ......8 V- G& I! T: g
       printf_out();+ |$ k' G) k3 B5 x
}0 z/ X# C- S( N$ R& Q$ y4 e
void printf_out(void)
8 x! ^: C! V# R# p8 h. D{
# o  Q* v$ Q4 t, S; I# ^6 ]' V       inti;; w0 p, s, E4 t
       ......3 m2 W- \- E& b" g. t% Q
}1 z# d! E$ t' \' ^' n/ w
float height[size];* z# ?7 }4 Y' X
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
" {3 [1 i8 A( U% Pvoid printf_out(void);
' m( y) o* B. e# H  u: r8 x就等价于:1 Z+ Q, C3 y" m
extern void printf_out(void);
  L5 k$ [7 U: }9 {0 u7 d, ^位于所有函数之外的函数声明与变量声明作用相同。
作者: ygcgsa    时间: 2016-4-28 14:49

作者: 离远的远离    时间: 2016-5-27 19:39
讲的好




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2