在单个项目中使用多个源文件 ( .cpp
) 和头文件 ( ) 有什么好处?.h
它只是一种优惠还是有真正的好处?
它可以帮助您拆分代码并按主题对其进行排序。否则你会得到一个有 1000 行的文件……这很难管理……</p>
通常,人们有一个或几个类的 .h 和 .c。此外,它加快了编译速度,因为只有修改过的文件和一些相关文件需要重新编译。
拆分任何规模合理的项目都会为您带来一些优势,其中最重要的有以下几点:
加速编译- 大多数编译器一次处理一个文件。因此,如果你的 10000 行代码都在一个文件中,而你更改了一行,那么你必须重新编译 10000 行代码。另一方面,如果你的 10000 行代码平均分布在 10 个文件中,那么更改一行将只需要重新编译 1000 行代码。其他 9 个文件中的 9000 行不需要重新编译。(链接时间不受影响。)
增加组织- 沿着逻辑线拆分代码将使您(以及项目中的任何其他程序员)更容易找到函数、变量、结构/类声明等。即使能够直接跳转到许多编辑器和开发环境(例如 Microsoft Visual C++)中提供的给定标识符,有时您仍需要手动扫描代码以查找某些内容。就像将代码拆分可以减少您需要重新编译的代码量一样,它也减少了您需要阅读的代码量才能找到一些东西。想象一下,您需要找到几周前对声音代码所做的修复。如果您有一个名为 GAME.C 的大文件,则可能需要进行大量搜索。如果您有几个名为 GRAPHICS.C、MAINLOOP.C、SOUND.C 和 INPUT.C 的小文件,
促进代码重用- 如果您的代码被仔细地拆分为彼此独立运行的部分,这使您可以在另一个项目中使用该代码,从而为您节省大量以后的重写。编写可重用代码不仅仅是使用逻辑文件组织,但如果没有这样的组织,很难知道代码的哪些部分协同工作,哪些不协同工作。因此,如果您尝试在另一个项目中使用该代码,则将子系统和类放在单个文件或仔细描述的文件集中将对您有所帮助。
在项目之间共享代码- 这里的原则与重用问题相同。通过仔细地将代码分离到某些文件中,您可以让多个项目使用一些相同的代码文件而无需复制它们。在项目之间共享代码文件而不是仅仅使用复制和粘贴的好处是,您对该文件或一个项目中的文件所做的任何错误修复都会影响另一个项目,因此两个项目都可以确保充分利用最新版本。
在程序员之间拆分编码职责- 对于非常大的项目,这可能是将代码分成多个文件的主要原因。在任何给定时间让一个以上的人对单个文件进行更改是不切实际的。因此,您需要使用多个文件,以便每个程序员都可以处理代码的单独部分,而不会影响其他程序员正在编辑的文件。当然,仍然需要检查两个程序员是否尝试更改同一个文件;配置管理系统和版本控制系统,如 CVS 或 MS SourceSafe 在这里为您提供帮助。以上所有内容都可以被认为是模块化的方面,模块化是结构化和面向对象设计的关键要素。
然后,他们继续讨论如何做、潜在的陷阱、解决问题等。
你应该检查一下。
代码文件在几百行之后变得不可维护(尝试在其中搜索!)。有些人达到几千(但这已经是一个问题)。小项目几千行,中项目几万行,大项目几百万行。文本编辑器无法处理这么大的文件(但程序员自己也不能)。
如果要将项目分成不同的编译单元,也需要将项目拆分为不同的源文件,这会使编译速度更快,因为只有部分项目需要重新编译。
几十年前,程序过去常常写在一个文件/一堆卡片中。然而,与现代程序相比,这些程序很小,而且完全无法维护——即使是很小的变化,本质上也需要重写,这对可以实现的复杂性设置了一个固定的上限。
现代、更复杂的项目本质上需要拆分。坦率地说,将所有内容放在一个文件中的问题是我从未问过自己的问题,因为这个想法简直不可思议。
不同的 cpp 文件被编译为单独的编译单元。这允许您将事物(标头包含、匿名命名空间、pimpl)与源代码的其余部分隔离开来。
有时两个库不能在一个源文件中一起使用,因为它们存在名称冲突。这可以通过将每个库头包含在不同的 cpp 文件中并通过相应的头文件公开所需的功能来解决。
如果它是一个小项目,如 hello world,则没有优势,但想象一下 windows、google chrome 或 android 之类的东西。
这么大的项目不可能用一个文件来管理。
您项目的多个文件与代码的可管理性和可重用性有关。