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

[ARM资料] 外部声明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
* m' T5 b* t2 V! Q/ ~" _6 d1 omain()" Y5 q1 G) k: v/ r" o" d
{2 w% U6 o1 r+ O
       externint y;
$ V  E" E; G" d8 L$ `       ......! ?; G  d* K3 L' U2 r4 T$ D9 }
}
, N3 J  E- B: D  \' Vfunc1()
2 J, ^5 @7 T8 K{
* b6 l  _% `, A$ g       externint y;
0 O  q. ]- x. R3 Z% F# h6 F- X; G       ......
& y! F  @  O3 o- [5 W}1 R) m) V2 G8 C; u
int y;& X) t6 Z  I% ?# e( n$ o
尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。
" M/ D) j$ t2 ?, t例如:
4 e1 P  W0 K' M  B: P7 Mmain()
% p% H$ n- r+ R" L- U5 w% E4 |{
7 {& q. o9 ~8 p9 R- Y- d       inti;
! O/ }# t& `: [2 x! R       voidprintf_out(void);
4 J, b" t$ j' _& E- e3 ]- z       externfloat height[];
# a4 X5 E, o# `( S       ......
  W2 g: _3 a) J+ T; z/ i( {, O       printf_out();4 ]4 c5 @+ E; i1 g# k
}$ U8 b! i1 \" u0 B8 C$ h' N
void printf_out(void)
- u, u1 v2 I( ^) G0 \- F{
* }8 w9 M1 i+ u  x4 u: F$ L5 n# c       externfloat height[];/ {$ N& q0 c9 Y  D! O6 |% {
       inti;3 [5 O& k" r/ ^' e
       ......6 ~  Z7 r. C/ }& S: d% D; x
}) N1 k) A/ h, E& Z5 q$ N! g
float height[size];
, A0 N1 m6 t8 l- `; m函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。* @1 f' v# u9 ?( M8 d5 c7 F
例如:- w4 S& ]' }% c' h& N) y
extern float height[main()
. u% b% F/ E, t; N. c  _{
& ~6 c/ l' W  S6 J& p) q       inti;
7 u3 u, J# J3 ~- ?0 K  W4 u! O3 K4 j       voidprintf_out(void);7 m: x5 I+ a" g  q# v* f! s
       externfloat height[];& A& k2 p  D# `
       ......
* |% f8 o- w; I: R( y       printf_out();: C- |0 C: @- d% O
}; B: o- ^/ @" F: z& \9 J4 L; W* ]3 S
void printf_out(void)6 q- c  g( Z- K+ A: U
{/ h3 Z, l$ Z5 P- ^+ m
       inti;4 [; [; x( `7 F" H3 S- s
       ......4 k/ Y3 D& r! N5 E# c+ h" \1 r* R
}
: y3 v7 d6 w8 ^5 J5 i7 m$ C- \4 n* [7 Sfloat height[size];7 A  o+ v$ a4 @3 ]
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:
+ T+ [" N& |; a. t( Q4 ~void printf_out(void);" c$ C2 }/ F/ v# @& h
就等价于:' y& Q' U2 d" q* g# M& R  U
extern void printf_out(void);0 ?5 Z2 j. U( F/ Z9 `
位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-21 19:38 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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