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

[ARM资料] 外部声明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
- u3 U+ S+ y8 m1 L: p+ x- M/ w1 }" [main()0 E1 @. P# k% s
{
: n8 J1 y+ |7 t& H       externint y;6 g( c2 K0 `9 s, B" {
       ......
/ q/ H& \$ S4 R, P* b6 p  a}; c8 \9 c' X' Z6 S. E( H
func1()
) n; @8 ?6 J4 p' r: A{
2 k. E3 R$ i, G/ Q       externint y;
. }! C! k- n+ [4 U5 i+ ?7 Y4 A  l  l       ......6 L, s4 x+ b9 R) l% U) ~  J3 Y% Q. Y
}
, P6 C5 }$ R6 b8 x7 L. v, f/ Dint y;$ h' F5 D: b  }, f) x( ~1 T
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。
" W& @1 h1 {$ `2 F+ d1 L2 T例如:
$ N2 w9 R. Z- x) O  bmain()% `9 y# u% ?! f' p6 v6 q
{. d( u4 s; ~/ `5 R# Y7 p  S
       inti;
' Q) Q6 k# s' y, N8 v; G5 E       voidprintf_out(void);
4 n9 u& E0 u3 F; V4 z* U) f       externfloat height[];8 Z1 j% n8 L+ T! b6 n: h3 s, E
       ......- D' l" Q; O! ~5 Z3 `. `
       printf_out();, k- U' S; k. K, C% f/ r
}7 J3 Q1 I6 S- q& J
void printf_out(void): k' R. R: t4 S. c
{
( z! x0 z6 |) J. Z* q! Q0 X9 e       externfloat height[];
" P' ]. \5 R- T+ j/ G4 R9 Y0 X. Q       inti;4 q; y/ V) Z0 W8 g; h! a2 D
       ......
. o  l8 f6 @  ]8 }! ?' L8 e}4 W& {+ `8 i$ S( O
float height[size];( a/ g: R4 r- `6 B! X5 ^6 H! I
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
. ~$ a$ E; X% ]  G例如:
/ }6 F, S3 }7 I" Q5 Uextern float height[main()
5 ^# x8 C4 \8 c9 O& \{
) e1 D4 a, ?! E- o. _       inti;1 I/ D, S  R1 J1 M( Y. Y( c( ^
       voidprintf_out(void);- l, ~. L, _( g
       externfloat height[];1 ]) Y3 U  Q$ C; ], o
       ......! G, e& q# A  ~$ q
       printf_out();
/ Z, n. U4 P  M1 f' R1 C* W6 \# z}
. X1 Q2 _. S  [& M- h' b% `8 a: Pvoid printf_out(void)" L/ P3 j( F; |0 O
{
! F$ {# G$ r6 y) }* b       inti;
0 p) c1 l7 q2 R+ {2 T; P# z% C       ......% Y. q8 j( A) v  n/ Y3 {
}0 S6 h8 c) d& N* M' o7 L
float height[size];
& b5 u* J2 ?# z- G' f) H/ Y1 }1 Y定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:$ L1 k: W# |3 l$ I& F2 n3 W( @
void printf_out(void);
1 x2 H# V. t+ I9 z# M# K% z就等价于:. g. x4 O, g* }5 j, U- ~
extern void printf_out(void);
( c; Z' ^0 y. X位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-30 16:14 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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