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

[ARM资料] 外部声明

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
在声明的程序段中,main函数不能访问变量y,因为它是在main函数的后面声明的,通过使用存储类型extern来声明变量,就可以解决这个问题。
& j5 I+ Q" q7 O' emain()# T; O3 ^1 M  V) _$ A) B
{1 O) H* t* d: Q
       externint y;
! m# W. G5 H; }+ E4 C       ......3 y! _/ l6 a  P
}5 \7 @  h4 h( \- D  d
func1()
5 R$ E* }6 ]4 g* _9 I$ f! T7 d- p{
- b0 z# d& J' g- o, Z7 V       externint y;' K7 O) Z0 f$ Y% D7 M' C2 I
       ......7 F# C2 n* V8 H/ y- Q6 d4 N$ W
}
6 ^& d7 U* m" ^3 G5 [; H0 A6 R+ A; ]int y;
' s( Q  `9 G  J; v0 X& j, q$ S8 u尽管变量y声明在两个函数之后,函数中y的外部声明语句告诉编译器,y是一个整数,是在程序的其他地方声明的。注意,extern声明语句并不会给变量分配存储空间。如果要声明数组,在定义语句还应该包括数组的大小。
: y# v0 a2 _% d* D/ v例如:
- z3 R- g* f8 q( u! P0 Mmain()
. e! [* h; A( `7 H3 L{+ S# h/ r  A8 U+ \& \
       inti;
  i  r3 T; x, V       voidprintf_out(void);
/ j! i( n) G0 a; Y4 D8 U       externfloat height[];% I) g, ]4 x( O/ r/ I! j6 g- f
       ......
! Q4 t7 K0 x6 V0 c  w- k$ q; x       printf_out();
/ ^( {: C% x# k. ~}
' U& i" E% H  Nvoid printf_out(void)4 R, Y' E) Y, v* q8 [, }
{; r% P" c5 M, d/ S
       externfloat height[];
, I, V5 h5 O( j8 Y% E       inti;
' ^6 u# r! }4 i       ......
8 e7 N3 ~/ F# }  N- |, k' R& I}
7 A5 b/ ?% J. ?0 Cfloat height[size];( c  b6 m3 b; @& `5 K
函数中的extern关键字知识为本函数提供类型信息。通过把外部声明放在所有函数之前,就可以为所有函数提供类型信息。" T0 i  M0 {" q3 U8 d
例如:
- D  {! M; [; ^/ }% V, e" d9 _extern float height[main()
. R: Q  ^. u1 v9 L{
, S1 D! Y0 J" f5 `! T       inti;
2 B# c$ t; z+ Q3 d       voidprintf_out(void);; T/ W0 P" v& G# s
       externfloat height[];
8 e! O* c! J4 v7 }: U       ......
7 |! {4 k3 U3 j# j       printf_out();  H( V+ V4 O+ d& `! J7 @& I* X/ ^0 i
}; C* [6 _: {7 d; ?
void printf_out(void)! U- C# w' c- C$ k  a6 @7 j  s
{' T, V  U& ]) ~( n; O$ p
       inti;$ t3 Z8 x; M* J4 Y! o0 z; X, U
       ......
, l% H% w4 S. b}
4 \8 J$ B6 s( v1 mfloat height[size];+ H0 d1 m8 b' d% B" n) w  t% R; C
定义与声明之间的不同同样可应用于函数。当指定了函数参加和函数体时,也就定义了函数。它告诉编译器,为函数代码分配存储空间,为参数提供类型信息。由于默认情况下函数是外部的,因此声明函数时不需要加修饰符extern。这样,声明语句:) c8 }, u1 w9 z1 g! |5 ?6 y9 x
void printf_out(void);
8 {; y& k# u. k1 ?( \- X4 e! f8 W就等价于:5 N# o7 }- B( i  z( U6 k
extern void printf_out(void);2 }0 N8 O9 n% i8 |' L+ \. e
位于所有函数之外的函数声明与变量声明作用相同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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