找回密码
 注册
关于网站域名变更的通知
查看: 463|回复: 2
打印 上一主题 下一主题

[ARM资料] 外部声明

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-4-28 14:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。9 y* C1 ?* \' J
main()
: b2 \) Y7 U( F{4 n4 _; q/ v% z  f
       externint y;. r7 Q. ]+ S# d9 ]  n4 K
       ......* `" Y" F. H' F# D. Y# L3 R
}, z" a$ u9 c! y- A% Z. c
func1()
/ s8 h! k( R1 p1 E{( D1 U# e* r) G, G- G' D. {4 I  @
       externint y;8 R2 P7 {/ J+ i7 P" R) F9 y
       ......0 |0 ?! |; Z- [6 k- q9 r0 A
}/ l5 z) s1 X6 S
int y;5 f8 j" }& T6 ~& C( F/ t
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。$ y) N+ a" b4 s. @" S5 e0 f" s
例如:
( K' s6 J$ o! m# cmain()
9 e/ o; i8 O! W; T( j{
! ?/ f3 P! P$ ?2 }( ~5 n! x( t       inti;
2 F5 c% {" I5 n4 Q       voidprintf_out(void);
% ]( [) r; f: ~/ h5 [) c( O# F$ ]% k       externfloat height[];! e; D- L4 ~" f6 O) `
       ......9 R0 y; l, V8 z4 \  L; ]7 }& Y9 l& P
       printf_out();( l$ {* `( F3 q+ I4 k% |" R4 K
}, ~5 T' p# W9 }! N0 j+ w! E
void printf_out(void)
# g, P- J6 B9 _8 ~! a7 T% ~' R' C{& _5 W8 \1 H- V0 o
       externfloat height[];+ E/ ?$ a! F/ W( Y3 F8 o" T
       inti;
, a# q% r3 w. g+ y/ F5 }       ......5 y6 Y" U3 U% k  E5 ^5 N; G
}
1 {1 \# a: K* i0 Ofloat height[size];7 W3 H- ~7 E4 P# \  T, Y" }
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
6 U+ A, z+ G: u2 X( B# F2 ?例如:
$ m# f6 x( K3 O. textern float height[main()
: x; u3 o% r: z1 G{5 O) t& ^% \2 Q, J
       inti;
$ [9 B' f8 z, s       voidprintf_out(void);5 d8 A1 R2 `8 [- ]1 Z7 s8 _# q
       externfloat height[];# t: G0 y6 M- S2 G* K
       ......
0 ^3 f( w. s2 b       printf_out();# G5 f, L' h2 g4 U9 f
}  R5 u! j0 h! Q, w; @6 D5 u& j
void printf_out(void)& r! }: }; `$ g
{2 ^: v0 A" Y5 v$ f
       inti;6 e3 G" Y  T& r. ?) j3 c# W) E6 `
       ......
) q" V& V+ T7 B# E}
+ R- v  H1 x9 M4 {float height[size];( x5 Q9 c8 [1 F7 I8 Z* P: v
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
6 o- o% O0 o  Z1 dvoid printf_out(void);
7 r# |* T1 M' _( ~. B- h4 h. n+ ]就等价于:- W7 h4 c( H) i* D0 v
extern void printf_out(void);
, v  U0 z2 N6 @位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 20:23 , Processed in 0.171875 second(s), 25 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表