11716|10

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

谈谈如何在keil软件中实现模块化结构编程 [复制链接]

本帖最后由 caozhaokun 于 2016-2-3 13:35 编辑

下面的文字是比较粗糙的,我就先粘出几张图片,后期我会完善该帖子,让其有血有肉 有骨架;未完待续...

注意:
当你在一个C文件first.c 中定义了一个变量first_count,但是要在另一个C文件second.c 里调用该变量first_count,这时需要在文件second.c中进行申明。
Example:
first.c 中定义: unsigned char flag;    second.c中申明:extern unsigned char flag;

注意second.c文件中要加上变量的类型,不然有时会出问题;

.h文件里可以放 函数申明,宏定义,其他的都不要放
.c文件里可以放 函数定义

查看本帖全部内容,请登录或者注册

01.png (16.26 KB, 下载次数: 0)

01.png

02.png (9.15 KB, 下载次数: 0)

02.png

03.png (13.03 KB, 下载次数: 0)

03.png

04.png (8.56 KB, 下载次数: 0)

04.png
此帖出自51单片机论坛

最新回复

板等,做个记号。  详情 回复 发表于 2016-2-4 06:35
点赞 关注
 

回复
举报

6037

帖子

195

TA的资源

版主

推荐
 
caozhaokun 发表于 2016-2-3 13:55
受教了,版主,谢谢的!
我思考了好一会,我目前的知识体系认为:
.h文件在编译器中是首先编译的,也就 ...

我前面已经说了,头文件是不会被编译器单独编译的。头文件只是被嵌入到C文件中,然后对C文件进行编译。
c文件可以被include,但是如果出现交叉引用,那肯定是滥用,至于出不出错完全看c文件的内容是否会产生语法冲突。如果你的c文件按着h文件的标准写,那肯定是没有问题的,但是这不符合常规逻辑。所以尽量区分h文件和c文件的意义,按常规规则出牌。
此帖出自51单片机论坛
 
 
 

回复

6037

帖子

195

TA的资源

版主

沙发
 
原则上不要在头文件中定义变量,如果此头文件被多次引用,就会出问题。
头文件通常对函数和变量进行声明与数据类型的定义、宏定义。
此帖出自51单片机论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
lcofjp 发表于 2016-2-3 11:06
原则上不要在头文件中定义变量,如果此头文件被多次引用,就会出问题。
头文件通常对函数和变量进行声明与 ...

我想问一下:如果头文件里 定义了变量,多次引用后有哪些后果的?
定义的变量是可以作为该文件夹里所有文件的全局变量的
此帖出自51单片机论坛

点评

被include的文件(通常是头文件,也可以是c文件),会被展开到include语句的位置。 通常头文件就是被include的,因为通常编译器不会编译.h文件。 如果include语句不是放在函数内部的话,那么头文件的内容会具有全  详情 回复 发表于 2016-2-3 11:34
 
 
 

回复

6037

帖子

195

TA的资源

版主

4
 
caozhaokun 发表于 2016-2-3 11:17
我想问一下:如果头文件里 定义了变量,多次引用后有哪些后果的?
定义的变量是可以作为该文件夹里所有 ...

被include的文件(通常是头文件,也可以是c文件),会被展开到include语句的位置。
通常头文件就是被include的,因为通常编译器不会编译.h文件。
如果include语句不是放在函数内部的话,那么头文件的内容会具有全局作用域。
全局作用域在所有c文件中都是可见的(指的仅是非static的函数和变量)
如果此文件定义变量并且被多次引用,那么就会出现多个c文件拥有相同名称的变量或者函数定义,c中是不允许变量和函数重名的,所以就会导致编译错误。所以,通常不在头文件中定义函数(内联函数除外,内联函数不会产生函数调用,而是直接展开,与宏定义有点类似)和变量,但如果你能保证只被include一次,那也并没有什么大问题。
此帖出自51单片机论坛

点评

受教了,版主,谢谢的! 我思考了好一会,我目前的知识体系认为: .h文件在编译器中是首先编译的,也就是在程序运行之前就已经变异,有些像 宏定义 还请指正一二; 还有两个问题: 1:在一个.c文件中,include+  详情 回复 发表于 2016-2-3 13:55
 
 
 

回复

107

帖子

1

TA的资源

一粒金砂(中级)

5
 
感觉你还是先搞懂下面的概念:
声明、定义、赋值、赋初值、初始化。
此帖出自51单片机论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

6
 
lcofjp 发表于 2016-2-3 11:34
被include的文件(通常是头文件,也可以是c文件),会被展开到include语句的位置。
通常头文件就是被inc ...

受教了,版主,谢谢的!
我思考了好一会,我目前的知识体系认为:
.h文件在编译器中是首先编译的,也就是在程序运行之前就已经编译,有些像 宏定义
还请指正一二;
还有两个问题:
1:在一个.c文件中,include+include多个.c,【当多个.c文件交叉引用时,是否才会出现编译出错?】
2:在一个.c文件中,include+include多个.h,【此等情况下是不会出现编译出错】
非常感谢你花时间解答,
此帖出自51单片机论坛

点评

我前面已经说了,头文件是不会被编译器单独编译的。头文件只是被嵌入到C文件中,然后对C文件进行编译。 c文件可以被include,但是如果出现交叉引用,那肯定是滥用,至于出不出错完全看c文件的内容是否会产生语法冲  详情 回复 发表于 2016-2-3 15:21
 
 
 

回复

6037

帖子

195

TA的资源

版主

8
 
如果要进行模块化编程,建议:
1. 把每个c文件作为一个模块,相关部分放在同一个c文件中,模块的接口放在头文件中。
2. 既然模块化,就要避免全局变量的使用,通过接口(函数)来通信。当然全局变量的效率可能更高一些,但是全局变量不宜过多。
3. 模块内的私有成员(变量和函数)应该声明为static,这样不同模块间同名变量和函数不会产生冲突。
此帖出自51单片机论坛

点评

lcofjp,非常谢谢你解答了我的几个问题, 你的解答对我帮助很大,也很重要,矫正了我之前的认知; 问题细究之后,才发现理解的不够透彻,我仍需多加努力;  详情 回复 发表于 2016-2-3 15:36
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

9
 
lcofjp 发表于 2016-2-3 15:25
如果要进行模块化编程,建议:
1. 把每个c文件作为一个模块,相关部分放在同一个c文件中,模块的接口放在 ...

lcofjp,非常谢谢你解答了我的几个问题,
你的解答对我帮助很大,也很重要,矫正了我之前的认知;
问题细究之后,才发现理解的不够透彻,我仍需多加努力;
此帖出自51单片机论坛

点评

不客气,学习编程是个长期的过程,慢慢来!  详情 回复 发表于 2016-2-3 15:46
 
 
 

回复

6037

帖子

195

TA的资源

版主

10
 
caozhaokun 发表于 2016-2-3 15:36
lcofjp,非常谢谢你解答了我的几个问题,
你的解答对我帮助很大,也很重要,矫正了我之前的认知;
问题 ...

不客气,学习编程是个长期的过程,慢慢来!
此帖出自51单片机论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

11
 
板等,做个记号。
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
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
快速回复 返回顶部 返回列表