您的位置 首页 电源

51单片机C语言中.c文件和.h文件的相关

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

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的话,对应的是同一片内存单元。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/261088.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部