【问题标题】:Why include headerfiles in c++ and not the entire library为什么在 C++ 中包含头文件而不是整个库
【发布时间】:2015-08-26 12:12:15
【问题描述】:

我一直想知道为什么没有人包含整个库而不仅仅是一个头文件。难道是为了减少冗余。或者一些内存优化概念。我喜欢了解这些小的编程基础知识。请有人向我解释一下。谢谢。

【问题讨论】:

  • 您需要包含 declarations 的标头并链接到库(.lib.dll)以用于 实现(除非您使用一个只有头文件的库)。否则,您将拥有大量未解决的外部,因为您的类和函数都没有定义。
  • 其他一些原因:你的库的源代码(如果你有的话)可能很大,而且你不想每次编译你的程序时都编译整个库。
  • 更多信息here.

标签: c++ file header libraries


【解决方案1】:

为什么没有人包含整个库而不仅仅是一个标题 文件。是不是为了减少冗余

包含整个库(即标头和源)将更加多余。正如它现在工作的那样,您拥有包含已编译代码的库本身(.lib.dll.so 等)。您还拥有仅包含定义的标题。当您编写自己的代码时,您需要定义来了解库中可以使用的内容。编译应用程序时,将使用库文件中已编译的代码。因此,您不必在每次要使用该库时都必须自己编译它。

如果您要使用完整的库源代码,则必须自己从头开始编译它们。除了不方便之外,这也可能是:

  • 非常耗时:如果建库需要 5 个小时怎么办?
  • 很难做到:如果库有 100 个依赖项,而您需要构建/配置很多其他东西才能编译它?

【讨论】:

  • 是的,再加上一些人不希望其他人看到他们的代码和库的实现这一事实。因此,它们只是为您提供使用函数的标题,但无法看到函数是如何实现的。 (你知道闭源的人)
【解决方案2】:


  • 图书馆包括一堆文件,我们的程序只需要其中的几个。例如当我们编写一个普通的 c 程序时,我们不需要加载 Math.h 头文件,因为这个头文件包含在数学运算中。包含这些文件会增加程序的整体编译时间。因此最好只包含程序中需要其功能的那些头文件,而不是包含整个库。
  • 【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多