keil C模块化编程总结

11 篇文章 0 订阅

昨晚看了下模块化编程的东西,把自己的工程整了整,可惜没成功。今早发神经似的起床敲代码,很快就发现了错误,原来是条件宏定义的头文件名忘改了,汗!!!

整理下模块化编程的要点,感谢以下三位UP主的帖子:

http://blog.csdn.net/zhzht19861011/article/details/5974945

http://jyqcxl122621.blog.163.com/blog/static/61323392201172392519647/

http://bbs.mydigit.cn/read.php?tid=536508

通俗来讲:

1. h中只有宏定义和变量、函数声明,.c中包含.h,并有变量、函数定义。

2. 其他模块想要引用该模块的变量和函数,需在该模块.h中对变量、函数的声明前加extern。

3. 为避免重复定义,每个.h都应写为以下形式(以HAL.h为例):

#ifndef __HAL_H__

#define __HAL_H__

#include <reg52.h>

#define xxx xxxx

sbit ss = xxx;

.....

#endif


一、关于全局变量的定义、声明、引用:

在某个c文件里定义全局变量后,在其它c文件要用,则在要用c文件里用extern进行声明。
(1)在定义全局变量时可同时将其初始化
(2)在用extern声明时不能再初始化,否则编译器报错
举例:有两个c文件分别为one.c和two.c,two中要用到one中的全局变量N,怎么办
答案:在one.c中定义且初始化:u8 N = 0;
再在one.h中用extern声明:extern u8 N;(注:此处不能加= 0)
最后在two.c中包含one.h:#include "one.h"
全局变量的定义和初始化放在c文件中,声明放在对应的h文件中。 且要注意h文件里应仅有相应c文件里的函数和变量的声明,和相应c文件无关的东西不应该有。

二、关于头文件的包含:
头文件的包含就比较简单了:在相应c文件里一一包含所需的h文件即可。但千万不要将这些头文件全部放在c文件的相应头文件里,虽然这样会使c文件仅包含了一个头文件,看起来比较简洁,但这样会影响它的h文件的“纯洁性”。
在此提醒下新手们:要将c文件和其对应的h文件看成一体,即它们互相有着紧密联系;移植时,将它们同时搬走就行!

三、关于结构体类型的定义:
1、若结构体类型只需要在某个c文件中使用,那么就在相应c文件里定义该结构体即可。

2、若结构体类型要在多个c文件中使用,那么就应该在头文件中定义该结构体,再在要用它的文件中包含结构体定义 所在的头文件即可。


C语言模块化程序设计需理解如下概念:
(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;
(2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;
(3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;
(4) 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值