C语言模块化编程样例
模块化编程向来不是面向对象语言的专利,即使是C语言,为了降低文件、模块间的耦合度,依然要注意对变量、函数进行封装。
以下举例对C语言模块化编程进行浅析:项目中包含a.c和b.c文件,其中a.c中定义了变量/结构体,而b.c中需要用到这些变量/结构体,那么有如下几种方法可选:
- get/set封装
在a.c种为每个需要被外部引用的变量/结构体编写get/set函数,并在a.h中声明get/set函数,b.c include a.h,需要使用变量/结构体的值时调用get函数,需要设置变量/结构体时调用set函数:
//a.c
static int intA;
static struct structType structData;int getA()
{return intA;
}void setA(int a)
{intA = a;return;
}struct structType getStructData()
{return structData;
}
void setStructData(struct structType data)
{structData = data;return;
}
//a.h
struct structType{int c1;
int c2;
};int getA();
void setA(int a);
struct structType getStructData();
void setStructData(struct structType data);
//b.c
#include "a.h"void funcB()
{int tmpA = getA();tmpA += 1;setA(tmpA);struct structType structTmp = getStructData();structTmp.c1 = 0;setStructData(structTmp);return;
}
写起来比较繁琐,但是是规规矩矩的封装。
- get进阶封装
get/set封装使用时需要先get到变量值,加以修改后再set回去,相比之下,获取变量的地址之后直接进行修改要更方便些,写法如下:
//a.c
static int intA;
static struct structType structData;int *getPA()
{return &intA;
}struct structType *getPStructData()
{return &structData;
}
//a.h
struct structType{int c1;
int c2;
};int *getPA();
struct structType *getPStructData();
//b.c
#include "a.h"void funcB()
{int *tmpA = getPA();(*tmpA) += 1;struct structType *structTmp = getPStructData();structTmp->c1 = 0;return;
}
缺点是指针操作易发生段错误。
- 如果“b.c和a.c联系十分紧密,以至于b.c中用到的intA变量和a.c中用到的一样频繁”,这时也可以在get/set封装的基础上,在b.c中extern int intA;从而可以在b.c中直接使用intA,其他文件使用intA时借助get/set封装。而为了能让b.c extern,a.c中的intA就不能再加static,也就失去了get/set封装的意义,这是十分矛盾也是十分奇怪的写法。归根结底,“b.c和a.c联系十分紧密,以至于b.c中用到的intA变量和a.c中用到的一样频繁”这种情况是不应该出现的,如果两个文件联系紧密,那么该想想这两个文件是不是该合并成一个,或者把两者关于intA的操作提取出来单独存放。
模块化编程成功的前提是对模块有好的拆分,没有好的拆分,封装的工作将变得十分棘手。
C语言模块化编程样例相关推荐
- json stm8s103 解析_STM8 C语言精品编程100例 PDF 超清版
给大家带来的一篇关于C语言相关的电子文档资源,介绍了关于STM8.C语言方面的内容,本书是由STM8官网出版,格式为PDF,资源大小9.58 MB,赵荣轩编写,目前豆瓣.亚马逊.当当.京东等电子书综合 ...
- keil c语言模块化编程,keil C模块化编程总结
昨晚看了下模块化编程的东西,把自己的工程整了整,可惜没成功.今早发神经似的起床敲代码,很快就发现了错误,原来是条件宏定义的头文件名忘改了,汗!!! 整理下模块化编程的要点,感谢以下三位UP主的帖子: ...
- C语言模块化编程的例子
以往写C语言程序都是一个文件里面写个几十.几百行,在练算法的时候还可以,现在搞开发需要模块化编程,所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一 ...
- 单片机c语言模块化实例程序设计,单片机C语言模块化编程方法
当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程.比如你可能只是负责通讯或者显示这一块.这个时候,你就应 ...
- c语言程序报告样例,C语言个人实习报告定稿(样例3)
<C语言个人实习报告.doc>由会员分享,可免费在线阅读全文,更多与<C语言个人实习报告[定稿]>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. 1 ...
- 语言趣味编程100例无水印_趣味c语言编程100例(三)
经典c程序100例==51--60 [程序51] 题目:学习使用按位与 & . 1.程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 2.程序源代 ...
- Mr.J--C语言经典编程100例
C语言,一般为初学者的首选语言,说简单也简单,但是要真正学好C语言,也是一件很难的事,懂了这些100个例题,也就算是入门了吧,毕竟语言要学的太多,这只是基础. [程序1] 题目:古典问题:有一对兔子, ...
- 程序自我保护 c语言编程,C语言时尚编程百例
第一篇 基础 实例1 字符串输出 实例2 格式化输出 实例3 格式化输入输出 实例4 各数值类型在内存中所占字节数 实例5 如何使用递增操作符 实例6 使用算术运算符的计算器 实例7 ...
- c语言模块化编程extern的用法,关于模块化编程extern用法
单片机模块化 用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用. 举例说明:项目文件夹project ...
最新文章
- centos 7手动更改源
- graphic头文件函数_graphics.h头文件详解
- 全国大学生智能汽车竞赛-讯飞赛道规则解读
- 迫于项目压力研究果园
- 网站地图能给网站的优化带来什么好处
- Servlet学习笔记心得(二)
- C#通过SMTP发送邮件代码示例
- 未能捍卫科学家的奇思狂想,这家公司与3000亿美元失之交臂
- python爬虫高级知识点_Python爬虫知识点梳理总结,殿堂级小白入门必读
- linux disk 清除数据,如何在Linux中使用TestDisk恢复已删除的文件
- weblogic启动项目失败查看_weblogic启动报错常见错误解决办法
- Lucene的分析过程
- 网易2012校园招聘笔试题目
- 吴翰清(道哥):我对计算的理解
- 比例尺和分辨率的相关概念
- easywechat微信开发系列(2):公众号网页支付
- 同学们上课,今天我们学习:UI 操作一定要在 UI 线程吗?
- Linux内核中内存分配函数
- 渗透工具-fscan内网安全漏洞扫描
- 2023年直播行业的困境是什么?未来有哪些发展趋势?
热门文章
- spyder tensorflow-GPU配置
- 中达优控触摸屏编程视频教程_触摸屏组态编程软件|中达优控触摸屏编程软件(YKBuilder)1.0 官方版_ - 极光下载站...
- win10 CPU占用率过高 经常100%
- Golden Software Surfer 18中文版
- 计算机系统如何恢复出厂设置路由器,路由器怎么恢复出厂设置
- 关于举办第二届中国工业互联网大赛的通知——500万奖金池
- matlab背景图片上plot绘制图形
- 数据库整理-数据库特点
- 视频转换专家 Xilisoft Video Converter使用简介
- PCB阻焊层太近了会不会有问题?