【问题标题】:Are there any advantages of _not_ using multiple files in a code-project? (C++) [duplicate]_not_ 在代码项目中使用多个文件有什么好处吗? (C++)[重复]
【发布时间】:2013-03-22 22:12:51
【问题描述】:

相对于What are the advantages of using more then 1 code file for a project? (C++),我想知道不使用多个代码文件(例如 C++ 项目)是否有(技术或其他)优势?

拆分成几个文件只是人为的事情吗?在可见性/优化方面,机器一次处理所有这些不是更好吗?

【问题讨论】:

  • 那是他链接到的问题;)
  • 正是这个问题引发了我一段时间以来一直在想的问题。而且我认为这不仅仅是与那边的答案相反。
  • @pst with machine 我的意思是对文件的任何处理(编译,还有解析和其他)。
  • 我真的很困惑,为什么您认为这个反向问题的答案与另一个问题的答案完全相反。我考虑投票重新开放,因为乍一看这显然不是重复的。此外,你有超过 3k 的代表,大概知道重复,并且自从你链接到它之后已经阅读了另一个问题。但是,我无法想象这里还能说什么不适用于那里。因此,如果您想重新打开它,解释会很好。
  • @CodyGray 我的问题实际上是将所有源代码放在一个文件(或一个编译对象)中是否有好处。以不同的方式问我最初的想法,我可以问在一个编译过程中处理所有文件是否具有优势,从而为编译器提供最大的可见性,使其更好地完成工作。另一个问题让我更普遍地提出了这个问题。也许太笼统了。我该怎么做才能得到更好的答案?

标签: c++ code-organization


【解决方案1】:

将所有内容放在一个文件中会破坏文件级静态和匿名命名空间(并避免外部声明)的目的。

虽然它对编译器并没有多大好处。对于优化之类的事情,他们只是实现了链接器中需要全局可见性的部分(并且大多数当前的链接器都包含这种优化/代码生成功能)。

它将(或至少可以)减少完全重建的总时间。使用单独的源文件,您最终会为包含它的每个源文件重新编译每个头文件。只有一个源文件,您只需要编译一次(但预编译的头文件可以并且通常确实将其减少到它可能很少重要的程度,至少如果您使用它们)。

从实际的角度来看,这通常会缩短构建时间,而且通常会非常严重。大多数人都非常努力地隔离事物,因此程序的一部分中的更改只需要重新编译程序的一小部分。对于一个真正微小的程序之外的任何东西,每次进行任何更改时都必须重新编译所有内容将是完全无法管理的——对于一个体面的程序,您的构建时间会从几秒钟变为几分钟。

【讨论】:

    【解决方案2】:

    这实际上是一个微妙的问题。只有当文件满足另一个问题中回答的标准之一时,拆分文件才是有利的,即当文件或项目“足够大”以至于更易于拆分时。如果不满足这些标准,就没有优势。所以这个问题的答案是“如果分割文件的理由都不适用,就不要分割”。他们通常甚至为中型项目做。举个具体的例子,“Hello World”通常应该保存在一个文件中。

    【讨论】:

      【解决方案3】:

      如果您想将程序作为电子邮件附件发送,那么您只需附加一个文件。

      【讨论】:

      • 这是一个公平的观点。并巩固我的判断以结束这个问题,因为它没有建设性。
      • 如果您发送档案,您也只需要发送一个文件。另外,只需在推特上发布一个指向 github/bitbucket/... 存储库的链接!
      • 我总是忘记存档,最后附上几十个文件。谢谢你提醒我!
      • 周五晚上玩得很开心
      【解决方案4】:

      如果一切都在一个编译单元中,编译器可能会进行更多优化,这就是为什么 sqlite3 以这种方式分发的原因。

      【讨论】:

      • 较旧的编译器确实如此,但几乎所有现代编译器都支持链接时代码生成和其他强大的优化,这主要是出于对历史的好奇。跨度>
      【解决方案5】:

      好吧,如果您查看What are the advantages of using more then 1 code file for a project? (C++),您会发现拆分代码有很多好处。否则所有这些都会丢失。

      拆分代码的唯一好处是,如果您正在处理一个非常小的项目。然后将所有内容保存在一个文件中会更方便。

      大多数足够大的项目都有多个文件。在开发过程中,您只会感觉到对它们的不可抗拒(冲动)的需要。谁真正喜欢前后滚动超过 1000 行来进行一些编辑?

      是的,这是一件人道的事情。我们必须拆分内容才能理解它们。我们需要处理更小的代码。

      【讨论】:

      • 这对我没有帮助。我想知道在编译期间或一般情况下是否有优势。
      • @PatrickB。如果没有怎么办?如果这会导致错误的编辑和增加的编译时间怎么办?如果因为编译器设计是为了有效地处理多文件代码而没有呢?
      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多