头文件和库有什么区别?
我很难理解的一件事是编译器是如何工作的。 我遇到了很多困难,但特别是我不断地把头文件和库混在一起。 如果有人能把事情搞清楚,那就太棒了。
想想这两者(免责声明:这是一个真正的高层比喻;)..
- 标题是您可以拨打的电话号码,而…
- … 图书馆是你可以到达的真正的人!
这是“界面”与“实施”的根本区别; 接口 (头文件)告诉你如何调用一些function(不知道它是如何工作的),而实现 (库)是实际的function。
注意:这个概念是非常基础的,因为它允许您灵活性:对于不同的库可以有相同的头文件(即function被完全调用),并且每个库可以以不同的方式实现function。 通过保持相同的接口,您可以在不更改代码的情况下replace这些库。
而且:你可以在不破坏调用代码的情况下更改库的实现!
头文件 通常用于定义一个应用程序中的一个接口或一组接口。 将头文件看作是显示程序外部function的东西,同时省略了技术实现细节。
例如,如果您正在优化某个程序,则很可能会修改源(.cpp)文件以改进algorithm,但头文件不会更改,因为外部客户端仍使用相同的一组参数调用方法,返回值。
在像C ++这样的面向对象语言中,头文件通常包含以下内容:
- 类描述和inheritance层次结构
- 类数据成员和types
- 类方法
虽然在头文件中没有任何代码停止执行,但是这通常不受欢迎,因为它可能在代码中引入额外的耦合和依赖关系。
在某些情况下(如模板类),由于技术原因, 必须在头文件中定义实现。
一个库是你想要提供给一个程序或一组程序的代码的集合。 它包括一个特定的接口或一组接口的实现。
代码在库中定义,以防止代码重复,并鼓励重复使用。 库可以静态链接 (.lib)或dynamic链接 (.dll):
-
静态链接的库定义了一组导出符号(可以被认为是方法定义),然后在构build过程的链接阶段链接到最终的可执行文件(.exe)中。 它具有执行时间更快的优点(因为库不需要dynamic加载),代价是更大的二进制文件(因为方法本质上是在可执行文件中复制的)。
-
dynamic链接的库在程序执行过程中被链接,而不是链接程序。 当多个程序需要重复使用相同的方法,并在COM等技术中广泛使用时,它是有用的。
有一件事可能会让你感到困惑的是,C ++这个词库可以有多种含义。 这里已经讨论了一个含义:
二进制文件中可链接的一组函数。 这些可以静态链接或dynamic链接。
但还有另外一种types的库:所谓的仅包含头文件的库(包括STL,TR1和Boost的一部分)。 这些不是以单独的二进制forms存在,所以词库不是指特定的二进制文件,而是指一组包含的头文件。
希望这可以帮助。
库是代码,编译成一组目标文件。 目标文件包含编译的机器代码和代码使用的数据声明。
头文件定义了一个库的接口 :它告诉你如何正确使用库。 在C / C ++中,一个头文件给你一个函数名列表,以及如何调用这些函数:它们所带参数的数量和types,返回types,调用约定等。头文件还有很多其他的东西他们也是如此,但是最终,它归结为一套调用库代码的规则。
头只包含声明,而库也包含实现。
头文件描述如何调用function ,库包含实现此function的编译代码。
如果程序devise语言中的图书馆是一个通用图书馆,那么图书馆中的许多图书可以与语言的function/方法进行比较。 也可以将头文件与本书的行号进行比较假设在海得拉巴的某个图书馆和该图书馆中有一本书,该书出现在第24行中……与给出该图书馆地址的方式相同通过使用命名空间std(对于标准库),并且通过头文件给出行号,其中所有同一时间的书籍(在这种情况下的方法)(与input/输出stream相关的所有方法)被放置
HEADER FILE是写入函数的声明。通过使用头文件,我们可以访问特定的函数
而
LIBRARY FILE是写入特定函数的哪个定义。 MATH.H是一个HEADER文件,而MATH.LIB是库文件。
在程序中使用HEADER文件和库。
头文件包含到库的链接(库包含标准函数和方法),编译器通过预处理器识别源代码中使用的标准函数,parsing所有的指令(指令是程序前面的行,包括#符号,包括)在实际编译程序之前。
谢谢阅读!
我认为库是一个被重用了很多次的代码包,而且这个代码是预编译的,因此它是以标准forms提供的,所以我们不必为我们开发的每个程序编写代码。 头文件包含对代码的引用,简单地说,我们在程序中使用的函数(如“cin”和“cout”)在标准库中完全定义,头文件(如iostream头文件)包含对该代码的引用。 所以当我们编译我们的代码时,我们只是得到了用于cin和cout的预编译,而且我们不必为每次使用cin和cout编写代码。 或者以更简单的方式,我们可以说一个库包含所有函数的代码,并且头文件是达到该代码的一种方式。
图书馆是偶尔使用的类似对象的集合。 它通常包含对象或源代码forms的程序,模板等
头文件是库的位置(接口)
为了解释一个经典的笑话,区别在于库有一个头文件,而头文件没有库。
图书馆就像死木乃伊,用白色的长线包裹着。 他们死了。 只有通过头文件才能释放它们。 头文件包含一些方法来使它们生动起来,并且可以多次使用(代码重用)。
来自库的代码只会根据需要存储在头文件中。 整个头文件将被存储,这节省了处理器的存储空间。