高效的C编程之: 变量类型(下)
时间:12-18 10:21 阅读:1691次
*温馨提示:点击图片可以放大观看高清大图
简介:ARM C编译器支持基本的数据类型:char、short、int、long long、float和double。(EEFOCUS)
下图显示编译器对声明为extern变量的访问。
解决的办法是将要从外部引用的extern变量定义在一个结构体中。在程序中通过结构体访问外部变量。具体用法如下例所示。
/*************
*globals.h*
*************/
/*DECLARATIONSofglobals-includedinallsources*/
#ifdef__arm
structglobs
{chartx;
charrx;
图14.2对extern变量的访问
charbyte;
charc;
unsignedstate;
unsignedflags;
};
externstructglobsg;
#definetxg.tx
#definerxg.rx
#definebyteg.byte
#definecg.c
#definestateg.state
#defineflagsg.flags
#else
externchartx;
externcharrx;
externcharbyte;
externcharc;
externunsignedstate;
externunsignedflags;
#endif
/*************
*globals.c*
*************/
/*DEFINITIONSofglobals-singlesourcefile*/
#ifdef__arm
#include"globals.h"
structglobsg;
#else
chartx;
charrx;
charbyte;
charc;
unsignedstate;
unsignedflags;
#endif
/************
*access.c*
************/
#include<stdio.h>
#include"globals.h"
intmain()
{tx=1;
rx=2;
byte=3;
c=4;
state=5;
flags=6;
printf("%u%u%u%u%u%u\n",tx,rx,byte,c,state,flags);
return0;
}
将变量定义在结构体内有以下几点好处。
·全局变量使用更小的内存空间。(没有使用结构体占有24字节,而使用结构体之后只占有12字节)
·全局变量被放置在ZI段而不是RW段,这样就减少了ROM映像文件的大小。