我正在开发一个项目,其中包含相关的 Ansi-C 代码库。 (我称之为'主'代码库)。
我现在面临一个典型的问题(如下所述),如果我手边有面向对象的语言,我相信我能够很容易地解决这个问题。
问题在于: 我将不得不启动多个代码库;即我将不得不开始支持并行代码库(甚至可能在将来更多)。所有新的(即并行的)代码库的初始代码库最初将与旧的(即“主”)代码库相同。
当我们谈论'C'语言时,我一直在考虑在代码中添加'#ifdef'语句,并在那些'ifdef'块中编写分支空间代码。
希望我明白这个问题(足够了!),我想听听聪明模式的想法,这些模式可以帮助我在Ansi C中优雅地处理这个问题。
干杯
答案 0 :(得分:2)
不同代码库之间会发生什么变化?
如果只是不同的平台,您需要仔细隔离平台依赖关系,尽可能在所有平台上保持相同的核心代码,并将特定于平台的内容放入单独的文件中。
< / LI>如果你要彻底改变程序功能,你需要弄清楚如何保持一个未改变代码的共同核心,同时允许程序之间的差异。
请注意,在这两种情况下,首先要了解要改变的内容,并设置代码以尽可能少地进行更改。通常,处理变化的最佳方法(不可避免地会有变化;否则,有两个或更多版本没有意义)是将不同的变体放在单独的文件中,并编译和链接正确的文件。但有时,将变体(或变体的一部分)放在单个文件中并使用#ifdef
样式条件编译被认为更好。
另一个关键点是将所有内容保存在同一个版本控制系统中 - 尽可能长,或者比此长十年或两年。
我遇到的最大灾难发生在不同版本停止使用公共代码库时。现在我们需要重新整合两个代码库,分开发展的十年是一个主要障碍。过去十五年的综合发展有其起伏 - 但与我们现在面临的问题相比没有什么。啊!
答案 1 :(得分:0)
你可以抽象差异(或者至少尝试)。将所有特定于代码库的代码放在与程序逻辑分开的文件中。然后,您可以使用条件编译(ifdef-include),只需替换每个新代码库的特定于代码库的文件,同时整个应用程序逻辑可以保持不变。
答案 2 :(得分:0)
作为基于#ifdef
的解决方案的替代或补充,您可以在SCM中维护不同的分支。