【问题标题】:What are the advantages of using more then 1 code file for a project? (C++) [closed]为项目使用超过 1 个代码文件有什么好处? (C++)[关闭]
【发布时间】:2013-03-12 21:52:37
【问题描述】:

在单个项目中使用多个源文件 (.cpp) 和头文件 (.h) 有哪些优势?

这只是一种优惠还是有真正的好处?

【问题讨论】:

  • 一些文件可能会被包含在多个项目中。你不会迷失在 1000 行的文件中吗?一直滚动到功能预定义怎么办?
  • 我公司的代码大约有30000个cpp文件,每个文件有1000-20000行。我不想处理 4GB 的代码文件。
  • @MooingDuck 老实说,我不想处理 20000 行的文件。 ;-)
  • 我还只是在学习,所以我处理过的最大的代码是大约 6 或 700 行我自己的代码,我想这解释了为什么我更喜欢一个文件。我正在阅读的教程将只有10到100行代码的拆分文件分成多个文件。

标签: c++ code-organization project-files


【解决方案1】:

它可以帮助您拆分代码并按主题对其进行排序。否则你会得到一个有 1000 行的文件……这很难管理……

通常,人们使用 .h 和 .c 来表示一个或有时几个类。 另外,它加快了编译速度,因为只有修改过的文件,以及一些相关文件需要重新编译。

来自Organizing Code Files in C and C++

拆分任何规模合理的项目会给您带来一些优势, 其中最重要的是:

  • 加快编译速度 - 大多数编译器一次处理一个文件。所以如果你所有的 10000行代码在一个文件里,你改一行,然后你 必须重新编译 10000 行代码。另一方面,如果您的 10000行代码均匀分布在10个文件中,然后变化 一行代码只需要重新编译 1000 行代码。这 其他 9 个文件中的 9000 行不需要重新编译。 (链接 时间不受影响。)

  • 增加组织性 - 将代码沿逻辑线拆分将 使您(以及项目中的任何其他程序员)更容易 查找函数、变量、结构/类声明等。甚至 具有直接跳转到给定标识符的能力 在许多编辑器和开发环境中提供(例如 Microsoft Visual C++),总会有需要的时候 手动扫描代码以查找内容。就像分裂 code up 减少了你需要重新编译的代码量,它也 减少您需要阅读的代码量才能找到 某物。想象一下,您需要找到对声音所做的修复 几周前的代码。如果您有一个名为 GAME.C 的大文件, 这可能是很多搜索。如果你有几个小 名为 GRAPHICS.C、MAINLOOP.C、SOUND.C 和 INPUT.C 的文件,你知道 在哪里查看,将您的浏览时间缩短 3/4。

  • 促进代码重用 - 如果您的代码被仔细拆分为 大部分相互独立运行的部分,这让 您在另一个项目中使用该代码,从而节省大量重写 之后。编写可重用代码不仅仅是使用 逻辑文件组织,但没有这样的组织 很难知道代码的哪些部分协同工作 哪个没有。因此将子系统和类放在一个单一的 文件或仔细描述的文件集将在以后为您提供帮助,如果您 尝试在另一个项目中使用该代码。

  • 项目间共享代码 - 这里的原理和with一样 重用问题。通过仔细地将代码分离到某些文件中,您 使多个项目可以使用一些相同的代码 文件而不复制它们。共享代码文件的好处 在项目之间而不是仅仅使用复制和粘贴是任何 您对该文件或来自一个项目的文件所做的错误修复将影响 另一个项目,所以两个项目都可以确保使用最多 最新版本。

  • 在程序员之间拆分编码职责 - 对于非常大的 项目,这可能是将代码分离为的主要原因 多个文件。一个人以上是不切实际的 在任何给定时间对单个文件进行更改。因此你 将需要使用多个文件,以便每个程序员都可以 在不影响文件的情况下处理代码的单独部分 其他程序员正在编辑。当然,还是有 检查 2 个程序员是否尝试更改同一个文件; 配置管理系统和版本控制系统,例如 CVS 或 MS SourceSafe 在这里为您提供帮助。以上都可以 被认为是模块化的方面,两者的关键要素 结构化和面向对象的设计。

然后,他们继续讨论如何做潜在的陷阱解决问题等。

你应该检查一下。

【讨论】:

  • 一个包含数千行代码的文件并不“难以管理”。对于初学者来说,这简直是压倒性的,因为他们以前可能从未见过这样的东西。
【解决方案2】:

代码文件在几百行之后变得无法维护(尝试在其中搜索!)。有些人达到几千(但这已经是一个问题)。小项目几千行,中项目几万行,大项目几百万行。文本编辑器无法处理这么大的文件(但程序员自己也不能)。

如果您想将项目分成不同的编译单元,也需要将项目拆分为不同的源文件,这使得编译速度更快,因为只有部分项目需要重新编译。 p>

几十年前,程序过去常常写在一个文件/一堆卡片中。然而,与现代程序相比,这些程序很小,而且完全无法维护——即使是很小的变化,本质上也需要重写,这为可以实现的复杂性设定了一个固定的上限。

现代、更复杂的项目本质上需要拆分。坦率地说,将所有内容放在一个文件中的问题是我从未问过自己的问题,因为这个想法简直不可思议。

【讨论】:

  • 为什么要删除关于它如何减少编译时间的内容?这是我不知道的重要信息,也是我投票的原因。
  • @user1958850 我没有删除那个……
【解决方案3】:

不同的 cpp 文件被编译为单独的编译单元。这允许您将事物(标头包含、匿名命名空间、pimpl)与源代码的其余部分隔离开来。

有时两个库不能在一个源文件中一起使用,因为它们存在名称冲突。这可以通过将每个库头包含在不同的 cpp 文件中并通过相应的头文件公开所需的功能来解决。

【讨论】:

    【解决方案4】:

    如果是 hello world 之类的小项目,则没有优势,但想象一下 windows、google chrome 或 android 之类的东西。

    这样大小的项目不可能用一个文件来管理。

    您项目的多个文件是关于代码的可管理性和可重用性。

    【讨论】:

    • +1 表示可重用性。 OO 编程 (C++/Java) 的最大好处之一是您可以使用 MVC 方法使用类来构建处理不同事物的对象。然后,只要您在另一个项目或应用程序中需要该对象,您只需使用预先存在的类并将文件导入当前项目即可。节省大量时间。
    • 将项目代码拆分为专注于一个概念的文件也消除了让类查看其他类内部的诱惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2016-08-08
    • 1970-01-01
    • 2011-07-19
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多