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

[ARM资料] 外部声明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。. E) X& b8 W. t% G* a. P
main()* G8 l! G8 m5 H  w$ I$ ^% j
{
' M3 \, X0 b: }+ m/ C       externint y;
5 ]* ]/ H  f* h7 c* g9 Z  S3 }: K       ......4 N+ }' N( O) o
}7 b' y3 J- o0 x1 Q
func1()
5 A9 A) t4 G$ Y( @5 k- @' ?{
2 _7 n+ w; y; B$ C; d       externint y;
5 U5 M& k' i/ t: U       ......
+ Z7 [: ?4 r8 ?6 }; u, m7 G}8 U' O9 M# R. A$ a% J
int y;: p1 @  X  j( Q1 \) f- W: E; D
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。. X' V; o& l: y. \5 V0 A
例如:6 D! ?" ?& f" I5 F6 H
main()" Z( W( n1 }) Y3 K% O" i# b$ c
{; c( p/ s0 P+ r: @
       inti;9 V: V) a% B# i6 T' n
       voidprintf_out(void);  ~. J2 e% @0 f/ ]" r0 T
       externfloat height[];  f6 T3 }. G3 q9 d9 {+ l8 q
       ......) M5 Q$ {$ |. z# W' q5 A3 p
       printf_out();
$ B  w$ P; ?: ^9 x" \5 _}6 ]9 Y2 \0 U+ z9 Z! e) S) g# z
void printf_out(void)
! v' E" _0 m$ G& I2 S( d( d) h{
6 }  [6 @1 M8 `# h       externfloat height[];
+ N- s$ P# l0 M       inti;
% s5 N& F+ ?4 M       ......
2 _$ y& W; t  D7 y& A# l}  `/ j& L8 b0 U. j
float height[size];  Z, |0 r. G# t! ?( m+ o$ J- D
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。* G& e9 ^: c5 q! c
例如:
' x8 e- X& b0 T: lextern float height[main()/ {7 @; t. {/ }: h% ?
{
6 \4 a* k* i# H       inti;, {6 E; a+ m" c% a/ u( c$ p4 z5 y
       voidprintf_out(void);
0 D* T/ Q  @3 R" w       externfloat height[];
. A5 F4 a# p" _       ......
: C0 W3 ]& q8 ^: I7 t* }2 ]" w       printf_out();# |( ?% l5 y( d4 J/ L6 z2 \6 W; ]
}
( T- X: R0 n* y0 f7 c. Fvoid printf_out(void)" \$ m! ~4 |5 f$ N/ P$ l( X4 J8 A" T
{, n& \' i) k, W+ ]0 {. ^9 |
       inti;3 _# ~7 _6 @3 r0 L$ p
       ......8 \% X1 d: @: |9 ]- e5 x
}
" O- P5 m1 ?, K$ u* P; ?5 V$ s$ Ffloat height[size];
  Z2 j; i, n3 \9 Z定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:! T# a3 D, @/ o( y2 |
void printf_out(void);
, u# x! R- [0 \) G就等价于:
- O# {! V# f  sextern void printf_out(void);
3 B7 v9 [3 d. Z) j2 y位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 23:10 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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