1)h文件作用

1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明;
2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。

2)h文件里应该有什么
    常量,结构,类型定义,函数,变量申明。

3)h文件不应该有什么
    变量定义, 函数定义。

4)extern问题
    对于变量需要extern;
    对于函数不需要因为函数的缺省状态是extern的.如果一个函数要改变为只在文件内可见,加static。

5)include包含问题
    虽然申明和类型定义可以重复,不过推荐使用条件编译。

#ifndef _FILENAME_H,

#define _FILENAME_H

……

#endif

6)应该在那儿包含h文件
    在需要的地方.比如某个提供接口的h文件仅仅被1.c文件需要,那么就在1.c文件里包含。

编写的程序一般会有.H文件和相对应的.C文件,.H文件是声明所用,.C文件是其函数实现部分。在调用时只要包含.H文件即可,我们没有听说过#i nclude "delay.c"这类的程序,同时也不提倡使用这个形式。

在delay.h文件中:                //对调用的函数声明
#ifndef __DELAY_H__

#define __DELAY_H__

extern void Delayms(unsigned int n);

#endif

在delay.c文件中:                 //函数实现部分

#i nclude

//for crystal 11.0592M

void Delayms(unsigned int n)

{

unsigned int i,j;

for(j=n;j>0;j--)

for(i=112;i>0;i--);

}

在主程序main.c中

#i nclude                 //在主程序包含.h文件,不能包含.c文件

……

上述方法仍然要求每建立一个工程就需要把对应的头文件复制到工程的文件夹里,这样看来仍然是比较麻烦的,这时还有另外一中方法就是将做好的头文件放在一个文件夹中,然后将这个文件夹整体拷贝到..KEILC51INC下面,以后若需要使用某个头文件,就如使用KEIL自带的头文件一样方便了,在主函数mani()之前有一句#i nclude 就可以在main()中使用其中的函数了。

参考资料:

1)h文件里变量(函数)申明用不用extern

http://www.unixresources.net/linux/clf/program/archive/00/00/33/65/336569.html

2).c文件和.h文件的概念与联系

http://www.vckbase.com/document/viewdoc/?id=1607

3)过马路,左右看

http://www.vckbase.com/document/viewdoc/?id=1606

4).c 和 .h文件的不同

http://hi.baidu.com/mfantastic/blog/item/d6fddd39793494f73a87ce0c.html

5)C51包含头文件方法

http://blog.ednchina.com/eleclike/52862/message.aspx

4).c 和 .h文件的不同

http://hi.baidu.com/mfantastic/blog/item/d6fddd39793494f73a87ce0c.html

模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:

(1)模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;

(2)某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;

(3)模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

(4)永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:

int a = 5;

#include "module1.h"

#include "module1.h"

#include "module1.h"

  以上程序的结果是在模块1、2、3中都定义了整型变量a,a在不同的模块中对应不同的地址单元,这个世界上从来不需要这样的程序。正确的做法是:

extern int a;

#include "module1.h" int a = 5;

#include "module1.h"

#include "module1.h"

这样如果模块1、2、3操作a的话,对应的是同一片内存单元。

【51】51单片机C语言中.c文件和.h文件的关联相关推荐

  1. .h文件包含后显示类型_C语言中#include只能包含.h文件吗?

    文/Edward之前我们已经讲到过,#include预处理指令使另外一个文件的内容在预处理的时候,先会被复制到当前的.c文件中来,产生一个中间文件,一般情况下,这个中间文件是存储在编译器内存里面的,它 ...

  2. 51单片机c语言中有file,51单片机C语言中.c文件和.h文件的关联

    1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 常量,结构,类 ...

  3. (转)51单片机C中关于.c文件和.h文件

    1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 ...

  4. 单片机c语言的define,单片机C语言中define的妙用

    单片机C语言中define的妙用 最近一款产品调试时发现了问题,在一起检查一个小伙伴的C程序.问题不大,但暴露了一点问题. 比如:PORTB=0x23; //他的意思是把第5和第2位置1 可是你能一下 ...

  5. 在单片机C语言中const是什么意思

    在单片机C语言中const unsigned char ov529[5]={0xff,0xff,0xff,SYNC_ID,0x00}前面加const是什么意思?? 表示常量,不允许修改里面的内容.也就 ...

  6. C语言中.c文件与.h文件 的使用

    C语言中.c文件与.h文件 的使用 我们都知道一个C程序的入口是main()函数,当我们遇到一个比较大的程序,需要被每个功能模块区分开始,就需要使用不同的.c和.h文件.这样方便自己管理和使用c程序, ...

  7. C语言中.c文件与.h文件 的使用-2020-12-27

    C语言中.c文件与.h文件 的使用 转自(https://blog.csdn.net/qq_35327108/article/details/83656409?utm_medium=distribut ...

  8. _nop_在c语言里什么作用,单片机c语言中nop函数的使用方法和延时计算

    原标题:单片机c语言中nop函数的使用方法和延时计算 标准的C语言中没有空语句.但在 的C语言编程中,经常需要用几个空指令产生短延时的效果. 这在汇编语言中很容易实现,写几个nop就行了. 在C51中 ...

  9. C语言 .c文件和.h文件的关系

    之前一直觉得c语言中.c文件和.h文件是成对出现的,但其实不然,.c和.h没有必然的关系,只不过我们习惯上将.c文件中要声明的函数接口放在我们创建的同名.h文件里面,然后供其他.c文件去包含. 其实在 ...

最新文章

  1. oracle数据库查表_oracle数据库常用的99条查询语句
  2. Numpy中np.mashgri() 函数介绍及2种应用场景
  3. Android--解析XML之SAX
  4. ajax图片上传(asp.net +jquery+ashx)
  5. matlab区分卷积和相关
  6. 【PDF】PDF无法注释的一种解决方案
  7. SEO如何快速提高网站排名?
  8. Spring Security 入门(1-3-2)Spring Security - http元素 - intercept-url配置
  9. jmeter 高并发测试报告_Windows下JMeter分布式压测环境搭建
  10. 自定义snmp oid
  11. BadBoy+JMeter应用过程中遇到的问题汇总
  12. (翻译)UIP Application Block学习系列(三)UIP概念
  13. 309.最佳买卖股票时机含冷冻期
  14. 【PDF处理】java将全图片的pdf压缩,输出新的pdf
  15. ssl2334 铲雪车
  16. 2017计算机开机号202,福彩3D2017第202期彩吧3D开机号429
  17. 金山办公2020笔试
  18. 一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=1+2+3.编程 找出1000以内的所有完数
  19. Java云电子病历系统源码,提供电子病历在线制作、管理和使用的一体化电子病历
  20. java获取Win系统日志最后(最新)开关机时间记录等

热门文章

  1. AI 收藏夹 Vol.004:虚拟爱豆出道
  2. 并发进程数、资源数、每个进程最大可得资源数问题[考试、测试题]
  3. cogs 1114. [郑州培训2012] 暴力摩托
  4. 2021年牛客跨年场有奖赛
  5. 税款输入不正确(代码J1,金额 0.00),改正 17.00 CNY
  6. Compositional Vector Space Models for Knowledge Base Completion
  7. inno setup 安装/卸载 弹出网页
  8. 刷面具模块手机一直卡在miui
  9. 如何实现一个圆弧倒计时进度条
  10. 1997-2019年樊纲市场化指数含stata do文档和原始数据