【发布时间】:2017-09-20 10:25:57
【问题描述】:
我是当前公司的新人,正在从事一个由我的直接团队负责人编写的项目。该公司通常不使用 C++,但我的同事用 C/C++ 编写了富有成效的代码。只有我们知道如何用 C++ 编写代码(我和我的领导,所以没有第三意见可以参与)。
在我对项目有了足够的了解后,我意识到整个结构是……特别的。
它实际上由一个编译单元组成,其中 makefile 将 main.hpp 列为唯一源。
然后这个头文件包含了项目所包含的所有源文件,所以它看起来像是一个非常大的列表:
#include "foo.cpp"
#include "bar.cpp"
在尝试理解其背后的逻辑时,我意识到这确实适用于这个项目,因为它只是一个界面,每个单元都可以在不访问任何其他单元的情况下进行操作,有时我问他为什么他是这样做的。
我对这个论点产生了防御性反应
嗯,它正在工作,不是吗?如果您认为这对您更好,您可以按照自己的方式进行操作。
这就是我现在正在做的事情,仅仅是因为我在思考这个结构时确实遇到了麻烦。所以现在我将“通常”的结构应用到我现在正在编写的实现中,同时只对整个项目进行强制性更改,以展示我将如何设计它。
我认为有很多缺点,从通过自己的项目结构混合链接器和编译器作业开始不能很好地服务,直到优化可能会导致冗余或模糊的结果,更不用说干净的构建该项目大约需要 30 分钟,我认为这也可能是由结构引起的。但我缺乏命名真实问题的知识,而不仅仅是假设的问题。
作为他的论点,“它按我的方式工作,不是吗?”确实如此,我希望能够向他解释为什么无论如何这是一个坏主意,而不是作为一个新的挑剔的家伙过来。
那么,这样的项目结构实际上会导致哪些问题呢? 还是我反应过度了,这样的结构完全没问题?
【问题讨论】:
-
恕我直言-保释。与这样的人一起工作将是一场噩梦。
-
只有一个编译单元意味着您必须在任何时候重新编译所有内容,即使是最轻微的更改。具有多个单元的良好分离结构有助于大大减少编译时间。
-
我知道有些项目将所有源代码放在同一个单元中,以实现额外的编译优化并挤出一些额外的性能。然而,这只是准备发布的一部分。开发仍以适当的多单元结构完成。
-
哦,对了,那只是一个大胖文件。文件有多大?现在我明白你的问题是为拥有多个编译单元找到一个很好的论据,只是试图了解这种情况。
-
@dhein 我想说最好的论点是编译时间(正如答案中提到的this),其次是更容易阅读,这在程序员中通常被低估了。