族谱网 头条 人物百科

头文件

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:530
转发:0
评论:0
作用在大多数现代计算机编程语言中,程序可以被分成如子程序的更小的组件,这些组件可以通过许多物理源文件分发,这些源文件被单独编译。当一个子程序在定义的位置以外的地方被使用时,就需要引入前置声明和函数原型的概念。例如,一个函数在一个源文件中有如下定义:intadd(inta,intb){returna+b;}在另一个源文件中引用的时候就可以声明成这样(包含函数原型):intadd(int,int);inttriple(intx){returnadd(x,add(x,x));}但是,这个简单的方法需要程序员为add在两个地方维护函数声明,一个是包含函数实现的的文件,以及使用该函数的文件。如果函数的定义改变了,程序员必须要更改散布在程序中的所有的原型。头文件提供了解决办法。模块的头文件声明作为模块公共接口一部分的每一个函数、对象以及数据类型。例如,在下面的情况下,头文件仅包含add的声明。每一个引...

作用

在大多数现代计算机编程语言中,程序可以被分成如子程序的更小的组件,这些组件可以通过许多物理源文件分发,这些源文件被单独编译。当一个子程序在定义的位置以外的地方被使用时,就需要引入前置声明和函数原型的概念。例如,一个函数在一个源文件中有如下定义:

intadd(inta,intb){returna+b;}

在另一个源文件中引用的时候就可以声明成这样(包含函数原型):

intadd(int,int);inttriple(intx){returnadd(x,add(x,x));}

但是,这个简单的方法需要程序员为add在两个地方维护函数声明,一个是包含函数实现的的文件,以及使用该函数的文件。如果函数的定义改变了,程序员必须要更改散布在程序中的所有的原型。

头文件提供了解决办法。模块的头文件声明作为模块公共接口一部分的每一个函数、对象以及数据类型。例如,在下面的情况下,头文件仅包含add的声明。每一个引用了add的源文件使用#include来包含头文件:

/* File add.h */#ifndef ADD_H#define ADD_Hintadd(int,int);#endif /* ADD_H */

/* File triple.c */#include"add.h"inttriple(intx){returnadd(x,add(x,x));}

这样就减少了维护的负担:当定义改变的时候,只须更新声明的一个独立副本(在头文件中的那个)。在包含对应的定义的源文件中也可以包含头文件,这给了编译器一个检查声明和定义一致性的机会。

/* File add.c */#include"add.h"intadd(inta,intb){returna+b;}

通常,头文件被用来唯一指定接口,且多少提供一些文档来说明如何使用在该文件中声明的组件。在这个例子中,子程序的实现放在一个单独的源文件中,这个源文件被单独编译。(在C和C++中有个例外,即内联函数。内联函数通常放在头文件中,因为大多数实现如果不知道其定义,在编译时便无法适当的展开内联函数。)

替代

在访问声明在不同文件中的标识符问题上,头文件不是唯一的解决方法。他们也有缺点,当定义改变的时候可能仍然需要在两个地方来修改(头文件和源文件)。一些更新的语言(如Java)省略掉了头文件,而使用命名规则(naming scheme),这就允许编译器来定位与接口和类实现相关的源文件。

#include语句的两种语法

#include语句有两种方式包含头文件,分别是使用双引号" "与左右尖括号。其区别是(对于不是使用完全文件路径名的)头文件的搜索顺序不同:

使用双引号" "的头文件的搜索顺序:

包含该#include语句的源文件所在目录;

包含该#include语句的源文件的已经打开的头文件的逆序;

编译选项-I所指定的目录

环境变量INCLUDE所定义的目录

使用左右尖括号的头文件的搜索顺序:

编译选项-I所指定的目录

环境变量INCLUDE所定义的目录

参见

应用程序接口

接口定义语言

#pragma once


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信