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

[ARM资料] 外部声明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
; R9 G7 z& y6 Q# emain()6 M. F8 ~, i2 Q% x5 h& I1 m  p# u
{
; Q: y1 K, ]1 V       externint y;% ~' u0 B7 h3 V5 s
       ......' y+ O" E3 b5 [, i. C
}+ i/ g2 ]/ S7 H5 ?: z# C6 _! ]3 r+ ^/ x3 F& X
func1()9 {3 h  z' `! N6 _- @
{" B, P+ h1 o' h- x# e8 x9 o9 U
       externint y;
- U$ q0 x/ F6 s' B5 m. }       ......
+ k" {/ x$ V* Q  B" r}
* L3 n) F4 d. ]1 M0 u) ^+ fint y;
; f, S2 I, n* ~5 l: E尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。2 W( q( C( n1 z% B
例如:
8 C: f# B- h7 |: T- K; Qmain()2 q0 `/ A) e3 E5 e$ j3 B
{" E6 M2 Z8 i" @) S0 I
       inti;
1 X+ c) b" P! ?  i. h3 l5 [9 R       voidprintf_out(void);
) H* `+ R0 O# A' B% n% r       externfloat height[];% s' Q9 W7 ~% k4 M" G: j/ V4 B
       ......6 [) b: g8 r! a) n
       printf_out();, q( L3 z$ h" z
}
! J. E0 a4 ]  R9 j) z/ Dvoid printf_out(void)8 [" s6 P& F" l8 l+ k" _
{
! S3 z1 }4 O: ?; @       externfloat height[];# q6 J, W; H% _
       inti;
8 B9 {& a: H; z' \) H! B/ Z8 N       ......
1 r3 ~* R6 k' B2 |+ h' R+ ~}9 M3 {8 y( v8 X  y% ~, r5 q
float height[size];
( B; c3 s% K, b6 R0 H# g函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。
7 J6 _( t( b( M. q/ w9 G例如:0 \; J( r4 F& M7 q5 ~4 h
extern float height[main()
" u6 Y; {* m6 q, v{
' N3 S/ q: u$ @$ M$ F& `8 V" C       inti;
0 D5 E+ N- n1 E4 p, @& }! X       voidprintf_out(void);4 H4 b* Q; [' L$ ]' _! s/ h
       externfloat height[];
. I$ e% |- C) d0 Z2 ?       ......% e6 S/ f$ p. |4 H2 b, b
       printf_out();
( P: ~  p( V5 c7 j, J9 u}3 W' h# P( k8 i2 E; T
void printf_out(void)' U8 B) G! J0 _3 q3 v6 U
{
, d5 R* c8 g! W9 b- x" S% ?. u6 D       inti;
0 e/ A! L1 t: B4 o$ E. J       ......+ K# _$ U* h. U- A, z
}! L& N% [3 j8 T
float height[size];4 ?' T, Y# p/ o$ P3 |6 P( A3 g. }
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
- v( q& S6 W+ `void printf_out(void);. B  |8 W8 w: w. s! `/ S6 L
就等价于:0 C$ l: F$ A! L0 Q0 P
extern void printf_out(void);
/ h  H' ^4 `$ A* B# M位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 16:53 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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