2

我正在开发一个带有相关Ansi-C代码库的项目。(让我称之为“主要”代码库)。

我现在面临一个典型的问题(如下所述),我相信如果我手头有一种面向对象的语言,我将能够轻松解决这个问题。

问题是:我将不得不启动多个代码库;即我将不得不开始支持并行代码库(将来甚至可能更多)。所有新(即并行)代码库的初始代码库最初将与旧(即“主”)代码库相同。

当我们谈论'C'语言时,我一直在考虑将'#ifdef'语句添加到代码中,并在那些'ifdef'块中编写分支空间代码。

希望我把问题说清楚了(够了!),我想听听关于聪明模式的想法,这些模式可以帮助我在 Ansi C 中优雅地处理这个问题

干杯

4

3 回答 3

2

不同的代码库之间会发生什么变化?

  • 如果只是不同的平台,您需要仔细隔离平台依赖关系,在所有平台上保持尽可能多的核心代码相同,并将特定于平台的内容放入单独的文件中。

  • 如果你要彻底改变程序的功能,你需要弄清楚如何保持不变代码的共同核心,同时考虑程序之间的差异。

请注意,在这两种情况下,首要的问题是了解将要更改的内容,并设置代码以使更改尽可能少。通常,处理变体的最佳方法(不可避免地会有变体;否则,拥有两个或多个版本没有意义)是将不同的变体放在单独的文件中,然后编译和链接正确的文件。但是,有时将变体(或变体的一部分)放在单个文件中并使用#ifdef样式条件编译会更好。

另一个关键点是将所有内容保持在同一个版本控制系统下——尽可能长,或者比这长一两年。

我见过的最大灾难发生在不同版本停止使用通用代码库时。现在我们需要重新整合两个代码库,十年的分离开发是一个主要障碍。前十五年的综合发展有起有落,但与我们现在面临的问题相比,这一切都没有。啊!

于 2011-03-07T08:09:11.130 回答
0

您可以抽象出差异(或至少尝试)。将所有特定于代码库的代码放在与程序逻辑分开的文件中。然后,您可以使用条件编译(ifdef-include)并且只需要为每个新代码库替换代码库特定的文件,而您的整个应用程序逻辑可以保持不变。

于 2011-03-07T08:10:27.680 回答
0

作为#ifdef基于 的解决方案的替代或补充,您可以在 SCM 中维护不同的分支。

于 2011-03-07T08:16:59.543 回答