C语言头文件规则.doc_第1页
C语言头文件规则.doc_第2页
C语言头文件规则.doc_第3页
C语言头文件规则.doc_第4页
C语言头文件规则.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言头文件规则 收藏 分享 2010-7-19 11:02 PM| 发布者: 春雨AI| 查看数: 61| 评论数: 0摘要: C程序采用模块化的编程思想,需合理地将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求,在模块的划分上主要依据功能。模块由头文件和实现 文件组成,对头文件和实现文件的正确使用方法是: * 规则1 . C程序采用模块化的编程思想,需合理地将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求,在模块的划分上主要依据功能。模块由头文件和实现文件组成,对头文件和实现文件的正确使用方法是: * 规则1 头文件(.h)中是对于该模块接口的声明,接口包括该模块提供给其它模块调用的外部函数及外部全局变量,对这些变量和函数都需在.h中文件中冠以 extern关键字声明; * 规则2 模块内的函数和全局变量需在.c文件开头冠以static关键字声明; * 规则3 永远不要在.h文件中定义变量; 许多程序员对定义变量和声明变量混淆不清,定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如: C代码 1. /*模块1头文件:module1.h*/ 2. inta=5;/*在模块1的.h文件中定义inta*/ 3. 4. /*模块1实现文件:module1.c*/ 5. #include“module1.h”/*在模块1中包含模块1的.h文件*/ 6. 7. /*模块2实现文件:module2.c*/ 8. #include“module1.h”/*在模块2中包含模块1的.h文件*/ 9. 10. /*模块3实现文件:module3.c*/ 11. #include“module1.h”/*在模块3中包含模块1的.h文件*/*模块1头文件:module1.h*/int a = 5; /* 在模块1的.h文件中定义int a */*模块1实现文件:module1.c*/#include “module1.h” /* 在模块1中包含模块1的.h文件 */*模块2实现文件:module2.c*/#include “module1.h” /* 在模块2中包含模块1的.h文件 */*模块3实现文件:module3.c*/#include “module1.h” /* 在模块3中包含模块1的.h文件 */ 以上程序的结果是在模块1、2、3中都定义了整型变量a,a在不同的模块中对应不同的地址单元,这明显不符合编写者的本意。正确的做法是: C代码 1. /*模块1头文件:module1.h*/ 2. externinta;/*在模块1的.h文件中声明inta*/ 3. 4. /*模块1实现文件:module1.c*/ 5. #include“module1.h”/*在模块1中包含模块1的.h文件*/ 6. inta=5;/*在模块1的.c文件中定义inta*/ 7. 8. /*模块2实现文件:module2.c*/ 9. #include“module1.h”/*在模块2中包含模块1的.h文件*/ 10. 11. /*模块3实现文件:module3.c*/ 12. #include“module1.h”/*在模块3中包含模块1的.h文件*/*模块1头文件:module1.h*/extern int a; /* 在模块1的.h文件中声明int a */*模块1实现文件:module1.c*/#include “module1.h” /* 在模块1中包含模块1的.h文件 */int a = 5; /* 在模块1的.c文件中定义int a */*模块2实现文件: module2.c*/#include “module1.h” /* 在模块2中包含模块1的.h文件 */*模块3实现文件: module3.c*/#include “module1.h” /* 在模块3中包含模块1的.h文件 */ 这样如果模块1、2、3操作a的话,对应的是同一片内存单元。 * 规则4 如果要用其它模块定义的变量和函数,直接包含其头文件即可。 许多程序员喜欢这样做,当他们要访问其它模块定义的变量时,他们在本模块文件开头添加这样的语句: C代码 1. externintexternVar;extern int externVar; 抛弃这种做法吧,只要头文件按规则1完成,某模块要访问其它模块中定义的全局变量时,只要包含该模块的头文件即可。2、设计程序时,根据程序的功能分别写成不同的文件,也可以认为是不同的模块,各模块包括h文件和c文件。举个例子,假设有如下文件,分别表示4个模块。m1.h m1.cm2.h m2.cm3.h m3.cm4.h m4.c(1)在包含的时候既可以是一个c文件包含另外一个h文件, 举例:在m2.c中包含m1.h也可以是一个h文件包含另外一个h文件, 举例:在m2.h中包含m1.h(2)h文件是可以被多次包含的,前提是h文件做了如下处理:#ifndef#define#endif 多次包含举例:m2.h包含m1.h m3.c包含m2.h和m1.h(3) 不要出现互相包含的情况,这种情况只能说明程序结构不合理。(4)不要在h文件里出现变量的定义C语言头文件的多重包含与重复包含2008-12-28 21:01 文件,如果在多个.h或者文件用引用时,这就涉及到C#ifndef FILE1_H #define FILE1_H #include iostream.h . . . #ifndef FILE2_H #define FILE2_H #include file1.h #include iostream.h . . . #endif那么对于以上两个文件的重复包含不对导致编译错误。#pragma once详细地说:如果有以下几个头文件及其包含关系为:,file3.hfile1.h,file2.hfile4.hfile1.h,file2.hfile5.hfile3.h,file4.hfile5file1file2解决方法:利用 #endif即每个文件在定义时都写成如下形式(以为例): #ifndef H_FILE1 #include . #endifFile3.h: #define H_FILE3 #include . #endif方法二:在每个文件的头部定义: 例: #include . #pragma once #include 在使用C语言的过程中,很多人都遇到过多文件下调用结构体变量时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论