我很难理解的一件事是编译器如何工作。我遇到很多困难,但是特别是我一直在混淆头文件和库。如果有人可以解决问题,那就太好了。
Answers:
这样想一下(免责声明:这是一个非常高级的类比;)..
这是“接口”和“实现”之间的根本区别;在接口(头),告诉你如何调用一些功能(不知道它是如何工作),而实现(库)是实际的功能。
注意:这个概念非常基础,因为它使您具有灵活性:您可以为不同的库使用相同的头(即,以相同的方式准确地调用功能),并且每个库都可以以不同的方式实现功能。通过保持相同的接口,可以更换库不改变你的代码。
并且:您可以在不破坏调用代码的情况下更改库的实现!
Util.lib
如何调用它的函数?我是否需要包含与U相关的头文件til.lib
?
甲头文件被通常用于在应用程序中定义的接口的一个接口或集。可以将头文件视为表示程序外部功能的东西,而忽略技术实现细节。
例如,如果您正在优化程序,则很可能会修改源(.cpp)文件以改进算法,但是头文件不会更改,因为外部客户端仍使用相同的参数集调用方法,并且返回值。
在像C ++这样的面向对象的语言中,头文件通常包括以下内容:
尽管没有什么可以阻止在头文件中实现代码,但是通常不希望这样做,因为它会在代码中引入额外的耦合和依赖性。
在某些情况下(例如模板类),出于技术原因,必须在头文件中定义实现。
一个库是一个代码集合,你要提供一个程序或程序组。它包括执行特定的接口或接口集。
在库中定义了代码,以防止代码重复并鼓励重用。库可以是静态链接(.lib)或动态链接(.dll):
甲静态链接库定义了一组然后被在生成过程中的连接阶段链接到最后的可执行文件(.exe)导出符号(其可以被认为是方法定义)的。它的优点是执行时间更快(因为不需要动态加载该库),但以更大的二进制文件为代价(因为方法本质上是在可执行文件中复制的)。
甲动态链接库中的程序的执行,而不是节目的链接过程中连接。当多个程序需要重用相同的方法时,它很有用,并且在诸如COM之类的技术中得到了广泛的使用。
HEADER文件和库在程序中的工作。
甲头文件中包含的链接库(库包含标准函数和方法),编译器识别经由预处理器的源代码中使用的标准的功能,可以解决所有的指令(指令在程序中的线之前通过包括#号),然后再实际编译程序。
谢谢阅读!
库是偶尔使用的类似对象的集合。它通常包含目标或源代码形式的程序,模板等。
头文件是库的位置(接口)