多文件程序设计中头文件若干问题

多文件程序设计中头文件若干问题

2010-12-21

首先说明的是头文件可以不存在的,因为用#include语句将其包含进源文件时,只是简单地将其内容复制入源文件中。它起的作用是避免程序员手工复制,并使代码更为简洁。所以多文件程序设计可以看成多源文件程序设计。

多文件程序设计中,文件之间的问题,无非就是共享数据的问题。这些共享数据可以是全局变量、全局函数、自定义数据类型等。

头文件中的全局变量与全局函数。头文件中的防重定义宏,只是保证同一个源文件中不会多次包括这个头文件。但这个头文件可以被多个源文件所包含的。所以头文件中的数据可能会在多个源文件中出现。对于全局变量与全局函数这是不允许的。也就是说头文件中不能定义全局变量与全局函数。但某个源文要用到别的源文件中定义的全局数据时,要提前声明(说白了就是要扩展全局数据的作用域,变量用extern TypeName Var;函数直接声明)。程序员当然可以一个一个地声明,但不觉得很麻烦吗?所以这么声明应该写到头文件中,再要扩展作用域的时候,#include一下就OK了。

头文件中的自定义数据类型定义。头文件中还会经常出现自定义数据类型的定义部分。自定义数据以类为例。这样的做的原因是:第一,当源文件中要定义一个类对象时,必须先有类的定义。第二,类的定义可以出现在多个源文中。

补充。还要说明的是,类的成员函数现实与静态变量的定义是不能放在头文件的,因为这些数据有全局函数与全局变量的性质。对于内联函数比较特殊,它可以出现在头文件中。

 

 

下面文章转载至 http://blog.csdn.net/micro0807/archive/2007/12/14/1935016.aspx

:

关于多文件程序结构的头文件设计的若干问题研究

 通过一段时间的编程实践,对较大的项目组织有一些心得了,那天又看到钱能的<<C++程序手机教程>>中关于头文件设计的建议,于是总结了以下几点头文件设计方法及文件结构组织方法:

1.怎么组织头文件和源文件的结构。

本文中的头文件专指.h文件,源文件专指.c.cpp文件,模块指完成一定功能的程序文件的组合。每模块仅包含唯一的源文件及唯一的同名头文件。该头文件中可包含其他头文件。

头文件遵循“界面头文件”的思想,充分表达该模块的功能。用于声明extern全局函数,声明extern全局变量,类型定义,包含其他头文件等。

源文件用于声明static静态函数,定义函数,定义全局变量,定义static静态全局变量。

2.全局变量的声明和定义问题。

全局变量可以使用extern关键字在多个模块中声明,但是只能且必须在其中一个模块中定义。比较好的一个解决方案是,将全局变量extern声明到一个公共头文件中,要使用该全局变量的模块都include它,然后在main所在的源文件中定义这个全局变量。这个方案可以比较好地兼顾模块独立性并解决变量重复定义的问题。

3.全局常量的声明和定义问题。

全局常量在声明时就必须定义,所以其声明和定义实际上是同一个问题。每个模块都可以最多定义一次同一个全局常量。全局常量也可以放在公共头文件中,每个模块都include它。

4.静态全局变量和常量的声明和定义问题。

静态全局变量和常量的作用域仅在模块内部,使用static关键字在本模块的源文件中声明。

5.函数的声明和定义问题。

全局函数在头文件中声明,而在源文件中定义;静态函数的声明和定义均在源文件中。

6.保护性的预编译代码问题。

头文件要使用#ifndefine#define#endif做保护,以免被多次包含。

 后来又向程序设计方法学的老师求证了一下,如果项目中确实能严格按照这几条组织文件,可以很好的解决模块独立和头文件互相包含的问题

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值