fbpx
维基百科

头文件

程序设计中,特别是在C语言C++中,头文件包含文件是一个文件,通常是源代码的形式,由编译器在处理另一个源文件的时候自动包含进来。一般来说,程序员通过编译器指令将头文件包含进其他源文件的开始(或头部)。

一个头文件一般包含子程序变量和其他标识符的前置声明。需要在一个以上源文件中被声明的标识符可以被放在一个头文件中,并在需要的地方包含这个头文件。

C语言C++中,标准库函数习惯上在头文件中声明,参见C标准函式库C++标准函式库

作用 编辑

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

 int add(int a, int b)  {  return a + b;  } 

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

 int add(int, int);    int triple(int x)  {  return add(x, add(x, x));  } 

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

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

 /* File add.h */  #ifndef ADD_H  #define ADD_H    int add(int, int);    #endif /* ADD_H */ 
 /* File triple.c */  #include "add.h"    int triple(int x)  {  return add(x, add(x, x));  } 

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

 /* File add.c */  #include "add.h"    int add(int a, int b)  {  return a + b;  } 

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

替代 编辑

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

#include语句的两种语法 编辑

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

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

  1. 包含该#include语句的源文件所在目录;
  2. 包含该#include语句的已经打开的头文件的逆序(因为头文件可以#include另一个头文件构成一个序列);
  3. 编译选项-I所指定的目录
  4. 环境变量INCLUDE所定义的目录

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

  1. 编译选项-I所指定的目录
  2. 环境变量INCLUDE所定义的目录

参见 编辑

外部链接 编辑

头文件, 在程序设计中, 特别是在c语言和c, 或包含文件是一个文件, 通常是源代码的形式, 由编译器在处理另一个源文件的时候自动包含进来, 一般来说, 程序员通过编译器指令将包含进其他源文件的开始, 或头部, 一个一般包含类, 子程序, 变量和其他标识符的前置声明, 需要在一个以上源文件中被声明的标识符可以被放在一个中, 并在需要的地方包含这个, 在c语言和c, 标准库函数习惯上在中声明, 参见c标准函式库和c, 标准函式库, 目录, 作用, 替代, include语句的两种语法, 参见, 外部链接作用, 编辑在. 在程序设计中 特别是在C语言和C 中 头文件或包含文件是一个文件 通常是源代码的形式 由编译器在处理另一个源文件的时候自动包含进来 一般来说 程序员通过编译器指令将头文件包含进其他源文件的开始 或头部 一个头文件一般包含类 子程序 变量和其他标识符的前置声明 需要在一个以上源文件中被声明的标识符可以被放在一个头文件中 并在需要的地方包含这个头文件 在C语言和C 中 标准库函数习惯上在头文件中声明 参见C标准函式库和C 标准函式库 目录 1 作用 2 替代 3 include语句的两种语法 4 参见 5 外部链接作用 编辑在大多数现代计算机编程语言中 程序可以被分成如子程序的更小的组件 这些组件可以通过许多物理源文件分发 这些源文件被单独编译 当一个子程序在定义的位置以外的地方被使用时 就需要引入前置声明和函数原型的概念 例如 一个函数在一个源文件中有如下定义 int add int a int b return a b 在另一个源文件中引用的时候就可以声明成这样 包含函数原型 int add int int int triple int x return add x add x x 但是 这个简单的方法需要程序员为add在两个地方维护函数声明 一个是包含函数实现的文件 以及使用该函数的文件 如果函数的定义改变了 程序员必须要更改散布在程序中的所有的原型 头文件提供了解决办法 模块的头文件声明作为模块公共接口一部分的每一个函数 对象以及数据类型 例如 在下面的情况下 头文件仅包含add的声明 每一个引用了add的源文件使用 include来包含头文件 File add h ifndef ADD H define ADD H int add int int endif ADD H File triple c include add h int triple int x return add x add x x 这样就减少了维护的负担 当定义改变的时候 只须更新声明的一个独立副本 在头文件中的那个 在包含对应的定义的源文件中也可以包含头文件 这给了编译器一个检查声明和定义一致性的机会 File add c include add h int add int a int b return a b 通常 头文件被用来唯一指定接口 且多少提供一些文档来说明如何使用在该文件中声明的组件 在这个例子中 子程序的实现放在一个单独的源文件中 这个源文件被单独编译 在C和C 中有个例外 即内联函数 内联函数通常放在头文件中 因为大多数实现如果不知道其定义 在编译时便无法适当的展开内联函数 替代 编辑在访问声明在不同文件中的标识符问题上 头文件不是唯一的解决方法 他们也有缺点 当定义改变的时候可能仍然需要在两个地方来修改 头文件和源文件 一些更新的语言 如Java 省略掉了头文件 而使用命名方案 英语 naming scheme naming scheme 这就允许编译器来定位与接口和类实现相关的源文件 include语句的两种语法 编辑 include语句有两种方式包含头文件 分别是使用双引号 与左右尖括号 lt gt 其区别是 对于不是使用完全文件路径名的 头文件的搜索顺序不同 使用双引号 的头文件的搜索顺序 包含该 include语句的源文件所在目录 包含该 include语句的已经打开的头文件的逆序 因为头文件可以 include另一个头文件构成一个序列 编译选项 I所指定的目录 环境变量INCLUDE所定义的目录使用左右尖括号 lt gt 的头文件的搜索顺序 编译选项 I所指定的目录 环境变量INCLUDE所定义的目录参见 编辑应用程序接口 接口描述语言 pragma once外部链接 编辑组织代码文件 以及使用头文件的陷阱 C 头文件包含规则 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 头文件 amp oldid 78044012, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。