.h 中一般放的是同名.c 文件中定义的变量、数组、函数的声明,需要让.c 外部使用的声明。 1)h 文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明; 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)。 2)h 文件里应该有什么 常量,结构,类型定义,函数,变量申明。 3)h 文件不应该有什么 变量定义, 函数定义。 4)ex tern 问题 对于变量需要 ex tern; 对于函数不需要因为函数的缺省状态是ex tern 的.如果一个函数要改变为只在文件内可见,加 static。 5)inclu de 包含问题 虽然申明和类型定义可以重复,不过推荐使用条件编译。 #ifndef _FILENAME_H, #define _FILENAME_H „„ #endif 6)应该在那儿包含h 文件 在需要的地方.比如某个提供接口的h 文件仅仅被1.c 文件需要,那么就在1.c 文件里包含。 编写的程序一般会有.H 文件和相对应的.C 文件,.H 文件是声明所用,.C 文件是其函数实现部分。在调用时只要包含.H 文件即可,我们没有听说过#inclu de "delay .c"这类的程序,同时也不提倡使用这个形式。 在delay .h 文件中: //对调用的函数声明 #ifndef __DELAY_H__ #define __DELAY_H__ ex tern v oid Delay ms(u nsigned 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 中 #inclu de //在主程序包含.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 #inclu de /*引用标准库的头文件*/ „ #inclu de “my header.h” /* 引用非标准库的头文件*/ „ v oid Fu nction1(„); /*全局函数声明*/ „ class Box /*类结构声明*/ { „ }; #endif ************************************************...