2975|1

362

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

如何能编好单片机的程序(5) [复制链接]

1) malloc分配的内存进行memset清零操作。(可以使用calloc分配一块全零的内存)
  2) 对一些栈上分配的struct或数组进行初始化。(最好也是清零)
不过话又说回来了,初始化也会造成系统运行时间有一定的开销,所以,也不要对所有的变量做初始化,这个也没有意义。好的程序员知道哪些变量需要初始化,哪些则不需要。如:以下这种情况,则不需要。
    
    char *pstr; /* 一个字符串 */
    pstr = ( char* ) malloc( 50 );
    if ( pstr == NULL ) exit(0);
    strcpy( pstr, "Hello Wrold" );
但如果是下面一种情况,最好进行内存初始化。(指针是一个危险的东西,一定要初始化)
    char **pstr; /* 一个字符串数组 */
    pstr = ( char** ) malloc( 50 );
    if ( pstr == NULL ) exit(0);
    
    /* 让数组中的指针都指向NULL */
    memset( pstr, 0, 50*sizeof(char*) );
    
而对于全局变量,和静态变量,一定要声明时就初始化。因为你不知道它第一次会在哪里被使用。所以使用前初始这些变量是比较不现实的,一定要在声明时就初始化它们。如:
  Links *plnk = NULL; /* 对于全局变量plnk初始化为NULL */
10hc文件的使用
---------
H文件和C文件怎么用呢?一般来说,H文件中是declare(声明),C文件中是 define(定义)。因为C文件要编译成库文件(Windows下是.obj/.libUNIX下是.o/.a),如果别人要使用你的函数,那么就要引用你的H文件,所以,H文件中一般是变量、宏定义、枚举、结构和函数接口的声明,就像一个接口说明文件一样。而C文件则是实现细节。
H文件和C 文件最大的用处就是声明和实现分开。这个特性应该是公认的了,但我仍然看到有些人喜欢把函数写在H文件中,这种习惯很不好。(如果是C++话,对于其模板函数,在VC中只有把实现和声明都写在一个文件中,因为VC不支持export关键字)。而且,如果在H文件中写上函数的实现,你还得在makefile 中把头文件的依赖关系也加上去,这个就会让你的makefile很不规范。
最后,有一个最需要注意的地方就是:带初始化的全局变量不要放在H文件中!
例如有一个处理错误信息的结构:
  char* errmsg[] = {
    /* 0 */    "No error",        
    /* 1 */    "Open file error",    
    /* 2 */    "Failed in sending/receiving a message", 
    /* 3 */    "Bad arguments", 
    /* 4 */    "Memeroy is not enough",
    /* 5 */    "Service is down; try later",
    /* 6 */    "Unknow information",
    /* 7 */    "A socket operation has failed",
    /* 8 */    "Permission denied",
    /* 9 */    "Bad configuration file format", 
    /* 10 */   "Communication time out",
    ......
    ......
  };
  
请不要把这个东西放在头文件中,因为如果你的这个头文件被5个函数库(.lib或是.a)所用到,于是他就被链接在这5.lib.a中,而如果你的一个程序用到了这5个函数库中的函数,并且这些函数都用到了这个出错信息数组。那么这份信息将有5个副本存在于你的执行文件中。如果你的这个errmsg很大的话,而且你用到的函数库更多的话,你的执行文件也会变得很大。
正确的写法应该把它写到C文件中,然后在各个需要用到errmsgC文件头上加上 extern char* errmsg[]; 的外部声明,让编译器在链接时才去管他,这样一来,就只会有一个errmsg存在于执行文件中,而且,这样做很利于封装。
我曾遇到过的最疯狂的事,就是在我的目标文件中,这个errmsg一共有112个副本,执行文件有8M左右。当我把errmsg放到C文件中,并为一千多个 C文件加上了extern的声明后,所有的函数库文件尺寸都下降了20%左右,而我的执行文件只有5M了。一下子少了3M啊。
备注
-----
此帖出自单片机论坛

最新回复

受教了  详情 回复 发表于 2010-4-19 23:43
点赞 关注
 

回复
举报

2751

帖子

0

TA的资源

裸片初长成(初级)

沙发
 
受教了
此帖出自单片机论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表