C程序中头文件相互包含精华

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。

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文件即可,我们没有听说过#include "delay.c"这类的程序,同时也不提倡使用这个形式。

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

#ifndef __DELAY_H__

#define __DELAY_H__

extern void Delayms(unsigned int n);

#endif

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

//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中

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

通常一个C程序工程按功能可以分成多个模块,一个模块通常由两个文档组成一个头文件*.h, 对模块中的数据结构和函数原型进行描述;另一个为C文件*.C , 对数据实例或对象进行定义,以及函数算法的具体实现,如I2C.C, SPI.C, DAC.C, DISPLAY.C 等,为了文件的调用,我们要为每个模块定义一个头文件,以I2C.C 来说,定义I2C.H。

#ifndef GRAPHICS_H /*防止graphics.h被重复引用*/ #define GRAPHICS_H

#include /*引用标准库的头文件*/

#include “myheader.h”/* 引用非标准库的头文件*/

void Function1(…); /*全局函数声明*/

class Box /*类结构声明*/

{

};

#endif

******************************************************************************* ******************************************************************************* ****************************************************

模块化的程序是黑盒,只向外提供接口(全局变量、外部函数),而不需要让调用者了解其中过程。尽可能地少定义接口有利于保持模块的独立性(不需要让使用者知道的内部函数与静态全局变量不需要在H文件中给出以避免使用者疑惑)在需要调用此模块的文件中写入include语句。一个好的工程,H文件的组织是很清晰的,只看H文件就能够写主程序调用相应的C模块。

头文件的格式如下(I2C.H为例):

********************************************************************

#ifndef I2C_H /*是否没有定义过"I2C_H”, 防止重定义*/ #define I2C_H /*定义"I2C_H" */

..........

bit SetSDA ( bit Up_Down );

bit SetSCL ( bit Up_Down);

#endif

********************************************************************** I2C.C格式如下:

**********************************************************************

#include < stdio.h >

#include "I2C.h"

void SendByte ( uchar c ); /*内部函数在.H 头文件中不描述*/ bit SetSDA ( bit Up_Down ) { .......... };

bit SetSCL ( bit Up_Down) { .......... };

**********************************************************************

另外一种写法:

=============================

#ifndef I2C_H

相关文档
最新文档