头文件的用途和结构

来源:互联网 发布:mac os最新系统 编辑:程序博客网 时间:2024/04/27 10:17
        早期的编程语言如BASIC、Fortran没有头文件的概念,C++/C语言的初学者虽然会使用头文件,但常常不明其理。这里对头文件的作用略做解释。

(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需按照头文件中的接口声明来调用库函数,而不必关心接口是怎么实现的。连接器会从库中提取相应的代码,并和用户的程序连接生成可执行文件或者动态连接库文件;

(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时的方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担;

(3)头文件可以提高程序的可读性(清晰性)。

头文件中的元素比较多,其顺序(结构)一般应安排如下:

(1)头文件注释(包括文件说明、功能描述、版权声明等)(必须有);

(2)内部包含卫哨开始(#ifndef XXX/#define XXX)(必须有);

(3)#include其他头文件(如果需要);

(4)外部变量和全局函数声明(如果需要); 
           外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。  有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域。 也可用static声明外部变量,使该变量不能被其他文件引用。用extern声明外部变量  extern可省略不写。  本文件里:在一个文件里,有不止一个函数,外部变量在第一个函数后面定义。若用extern在第一个函数前声明该变量则该变量可以在第一个函数中使用。  多个文件中:在其他文件中若想要使用该文件中已声明的全局变量,则在其他文件头部声明该变量,即可使用该全局变量。

全局函数就是可以被其他文件中函数调用,比如一个大型程序,由很多人来共同编写,每个人写的程序为一个文件,全局函数就可以被另一个文件中的程序调用,声明函数时不管写没写extern都默认为全局函数,如果不想被其他人调用,可以用static来定义,就只能被本文件程序调用。全局函数是定义在类外的函数,成员函数就是定义在类中的函数。
(5)常量和宏定义(如果需要);

(6)类型前置声明和定义(如果需要);

(7)全局函数原型和内联函数的定义(如果需要); 
内联函数必须是和函数体申明在一起,才有效。像这样的申明  Inline Tablefunction(int I)是没有效果的,编译器只是把函数作为普通的函  数申明,我们必须定义函数体。  Inline tablefunction(int I) {return I*I};  这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调  用。但是执行速度确比一般函数的执行速度要快。

(8)内部包含卫哨结束:#endif   // XXX(必须有);

(9)文件版本及修订说明。

上述排列顺序并非绝对,也不存在对错之分,可根据具体情况灵活安排。

如果程序中需要内联函数,那么内联函数的定义应当放在头文件中,因为内联函数调用语句最终被扩展开来而不是采用真正的函数调用机制
 
 
          
原文地址:http://hi.baidu.com/zhaogezhuoyue/item/f78cb75967ab0607e7c4a548