头文件和库之间有什么区别?

时间:2009-05-29 05:18:00

标签: c++ c

我很难理解的一件事是编译器是如何工作的。我遇到了很多困难,但特别是我总是把标题和库混在一起。如果有人能稍微清楚一点,那就太好了。

16 个答案:

答案 0 :(得分:109)

想到这两个(免责声明:这是一个非常高级的类比;)..

  • 标题是您可以拨打的电话号码,而......
  • ... 图书馆是您可以到达的实际人员!

这是“界面”和“实施”之间的根本区别; 接口(标题)告诉你如何调用某些功能(不知道它是如何工作的),而实现(库)是实际的功能。

注意:这个概念是如此基础,因为它允许您灵活性:您可以为不同的库具有相同的头(即功能以相同的方式完全调用),并且每个库可以实现功能以不同的方式。通过保持相同的界面,您可以替换库而无需更改您的代码。

并且:您可以在不破坏调用代码的情况下更改库的实现!

答案 1 :(得分:50)

头文件 通常用于定义应用程序中的接口或接口集。将头文件视为显示程序外部功能的内容,同时省略技术实现细节。

例如,如果您正在优化程序,则很可能会修改源(.cpp)文件以改进算法,但是头文件不会更改,因为外部客户端仍然使用相同的集调用方法参数和返回值。

在像C ++这样的面向对象语言中,头文件通常包括以下内容:

  • 类描述和继承层次结构
  • 班级数据成员和类型
  • 班级方法

虽然没有什么可以阻止代码在头文件中实现,但这通常不受欢迎,因为它可能会在代码中引入额外的耦合和依赖。

在某些情况下(例如模板化类),由于技术原因,必须在头文件中定义实现


是您希望提供给程序或程序组的代码集合。它包括特定接口或接口集的实现

代码在库中定义,以防止代码重复并鼓励重用。库可以静态链接(。lib)或动态链接(。dll):

  • 静态链接的库定义了一组导出符号(可以将其视为方法定义),然后在链接阶段将其链接到最终的可执行文件(.exe)构建过程。它具有更快的执行时间(因为库不需要动态加载),但代价是更大的二进制文件(因为这些方法基本上是在可执行文件中复制的)。

  • 动态链接库在程序执行期间链接,而不是链接程序。当多个程序需要重复使用相同的方法时,它很有用,并且广泛用于COM等技术。

答案 2 :(得分:9)

可能让您感到困惑的一件事是 library 这个词在C ++中可以有多种含义。这里有一个很好的讨论:

二进制文件中的一组可链接函数。这些可以静态链接或动态链接。

但是还有另一种类型的库:所谓的标题库(包括STL,TR1和Boost的部分)。这些不存在于单独的二进制形式中,因此单词 library 不是指特定的二进制文件,而是指一组包含的头文件。

希望这有帮助。

答案 3 :(得分:7)

库是代码,编译成一组目标文件。目标文件包含已编译的机器代码和代码使用的数据声明。

头文件定义库的接口:它告诉您如何正确使用库。在C / C ++中,头文件为您提供了函数名列表以及如何调用这些函数:它们采用的参数的数量和类型,返回类型,调用约定等。头文件中还有很多其他内容它们也是如此,但最终,它归结为一组调用库代码的规则。

答案 4 :(得分:7)

标头只包含声明,而库也包含实现。

答案 5 :(得分:2)

如果编程语言中的库是一般库,那么库中的许多书籍都可以与语言中的函数/方法进行比较。并且头文件也可以与书的行号进行比较 假设在海德拉巴的一些图书馆和那个图书馆里有一本书,那本书出现在第24行...... 通过使用命名空间std(对于标准库)给出库的地址的相同方式,并且由头文件给出行No,其中所有书籍(在这种情况下为方法)同时(所有与输入/输出流相关的方法) )被提出

答案 6 :(得分:1)

头文件描述如何调用功能,库包含实现此功能的已编译代码。

答案 7 :(得分:1)

HEADER FILE是写入函数声明的函数。通过使用头文件,我们可以访问特定的函数

,而

LIBRARY FILE是写入特定函数的定义的文件。 MATH.H是HEADER FILE,而MATH.LIB是库文件。

答案 8 :(得分:1)

在程序中使用HEADER文件和LIBRARY。

头文件包含指向的链接(库包含标准函数和方法),编译器通过预处理器识别源代码中使用的标准函数,在实际编译程序之前,解析所有指令(指令是程序中以#符号括起的行)。

感谢阅读!

答案 9 :(得分:1)

我认为库是一个代码包,可以多次重复使用,并且代码是预编译的,因此它以标准形式提供,因此我们不必为我们开发的每个程序编写代码。   头文件以简单的方式包含对该代码的引用我们在程序中使用的函数如“cin”和“cout”在标准库中完全定义,而像iostream头文件这样的头文件包含对该代码的引用。  因此,当我们编译代码时,我们只需要为cin和cout预编译,并且我们不必每次使用它时都为cin和cout编写代码。   或者以更简单的方式,我们可以说库包含所有函数的代码,头文件是达到该代码的方式。

答案 10 :(得分:1)

库是偶尔使用的类似对象的集合。它通常包含对象或源代码形式的程序,模板等。

头文件是库的位置(接口)

答案 11 :(得分:0)

用一句经典笑话来解释,不同之处在于该库有一个头文件而头文件没有库。

答案 12 :(得分:0)

图书馆就像死去的木乃伊一样,用白色的长线包裹着。他们死了。释放它们的唯一方法是通过头文件。头文件包含使它们生动的方法,它们可以多次使用(代码重用)。

答案 13 :(得分:0)

您可以将此示例视为理解 - Math.h是一个头文件,其中包含sqrt()pow()等函数调用的原型,而libm.lib,{{ 1}},libmmd.lib是一些数学库。简单来说,头文件就像一张名片,图书馆就像一个真人,所以我们使用名片(头文件)来联系真人(图书馆)。

答案 14 :(得分:0)

Header通常用于包含原型。标头在预处理时扩展,因此在编译时,代码可以访问相关的函数声明/原型。

库是实际的软件,其中包含功能原型的定义(在标头中)。库在链接时使用。定义(存在于库中)在链接时解决。

答案 15 :(得分:-4)

库中的代码只会根据头文件的需要进行存储。将存储整个头文件,这将节省处理器存储区域。