C语言头文件规则.doc
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
15
积分
还剩页未读,继续阅读
关 键 词:语言
文件
规则
资源描述:
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.c
m2.h m2.c
m3.h m3.c
m4.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…..
#endif
File3.h: #define H_FILE3
#include…..
#endif
方法二:在每个文件的头部定义:
例: #include…..
#pragma once
#include在使用C语言的过程中,很多人都遇到过多文件下调用结构体变量时出现错误的问题,主要的问题有:结构体重复定义、未知结构体、未定义的结构成员等等,其实这些问题主要是在多文件下结构体及其变量定义和声明位置错误造成的,正确的定义和声明位置应该是:
在H文件中定义结构体,在H文件中声明结构体变量(用extern),在C文件中定义变量,所有文件都包含H文件即可。
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:C语言头文件规则.doc
链接地址:https://www.renrendoc.com/p-49338941.html