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

[ARM资料] 外部声明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。" s9 _3 O7 Z! z  G
main()
- j& I( p; l* u& I: B{
0 C. a- T6 s! M4 {  I       externint y;1 o/ f; M& N  l. d6 ~) c3 J
       ......
. W/ B2 ~- r' X. a}
( H; _$ P1 }  _8 q8 pfunc1()% \5 [; g1 c8 w4 f( f2 [: j
{. g1 r5 P' |( g. Q' {; r# V. t
       externint y;8 D$ V) u- Y/ E  _6 q$ P, `2 u' L$ l
       ......
: m8 M: W" ]3 O8 G% x% M}
; F1 {( o# a# M- Wint y;5 }; z7 H0 }% L7 u: o
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。7 Z9 v+ m$ o  t" p( I, h- ?
例如:8 X8 G, v: ]8 C- c7 e# e
main()
4 ~$ h9 ?8 l- r, h! o! P' M& b{
2 o  c0 h  L" g. s       inti;& a+ G9 x8 q  t) w' w; r% c: D
       voidprintf_out(void);% [" X% V* B2 _6 T
       externfloat height[];
8 s7 _" i4 H7 Q; D       ....... S) P6 Q1 o: ?
       printf_out();
8 g: A( Q4 m+ Y2 v  p0 k  R}
5 s  e) e. Q- e4 I: xvoid printf_out(void)6 }& J* U6 f) f0 s
{
) ^# ]! @7 y& z4 M! V0 |, J& v* X       externfloat height[];2 c6 r4 D- `* R% N- d2 ~  h; ]
       inti;. N3 t( u6 g& U/ ]: w
       ......! Z+ f8 U( {0 B, v
}
* t8 e% c' |' z( Nfloat height[size];
* `7 d. x7 e- e& r) v函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
" i& x  \7 J; D, J6 m- Z例如:
6 Y) H! j- Z" cextern float height[main()
8 B& |3 T; W# A7 b/ J7 B. O{  X1 @! ~  D- B3 {1 h
       inti;
: C, O9 }1 J5 P' Z8 ]" q) |       voidprintf_out(void);
7 D6 s3 K3 {3 N/ o3 S       externfloat height[];
) E$ M% x7 `7 S% ~: j6 E       ......, v& [5 ~2 q- d+ y* ^3 d/ Q7 Z; c
       printf_out();, C. X. f- z+ @# b! Q' }
}
) X5 Q1 k! y: c0 I: l: E. kvoid printf_out(void)
7 J/ A( \" Z( v* P4 L{' Z' G* u' W' u$ z# f# [; |8 j
       inti;  r3 |& ~; ]  _/ i
       ......* W+ m* q& `, _4 o% C( [
}+ s* a1 u5 i1 f+ x5 `
float height[size];
) a& E2 J- k( U定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
2 d! ?! |6 Z  T# V' c9 b9 T' ovoid printf_out(void);8 Z, s5 ]! h6 [. i- d. u" N  N) r
就等价于:
5 p0 l8 e' L- ~9 y' S" U9 s( iextern void printf_out(void);
2 Q1 f6 X3 S1 ?. w位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-6 18:36 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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