4

我有以下两个(96 文件)代码的变体,它们之间的唯一区别在括号中:

  1. 双精度(每个变量都定义为 REAL*8 并且每个数字都定义为 1234D+02 )
  2. QUADRUPLE-PRECISION(每个变量定义为 REAL*16,每个数字定义为 1234Q+02)

如果我每次更改软件中的任何内容,我希望此更改在上述两种代码变体中保持一致。

在 Git(Hub) 中,我应该:

  1. 构建一个单独的存储库(我将如何轻松合并更改?),
  2. 建立一个不同的分支(但分支似乎最适合所有代码合并时),
  3. 建立一个叉子(但这似乎是为那些无法推送到主分支的人准备的)?

这里有一些相关的问题,但不是我想要的。我已经写了为什么我没有吞下他们的答案:

  1. 使用 git 同时维护不同版本的代码:Tobu 的回答说“ git cherry-pick在很多情况下可能不起作用”
  2. 使用 git 管理 Web 应用程序的多个版本:建议使用git 子模块,但有理由不这样做
  3. 跟踪源代码变体:建议使用#define,但是否有 FORTRAN 等价物?
  4. 如何在一个 GIT 存储库中跟踪项目的两个版本?:建议为“通用”代码设置第三个分支,但我看不到超过 2 个的好处。我不需要在这里使用 git cherry-pick 吗?
4

1 回答 1

0

自从我做任何 Fortran 以来已经很久了,但是如果你可以像在 C 中一样拥有基于参数化的宏,你最好的选择是拥有一个类似的条件宏

#define DECLARE_HIGH_PRECISION(Name, Val, Exp) \
#ifdef QUAD_PREC \
REAL*8 %Name% = %Val%Q%Exp% \
#else \
REAL*4 %Name% = %Val%D%Exp% \
#endif 

声明并初始化您的值,因为DECLARE_HIGH_PRECISION(Fred, 23, -3)您可能还需要一个宏来处理不需要名称的内联值,以便能够执行诸如Fred = Fred * HIGH_PRECISION(43, +6)等之类的操作。

于 2013-08-11T09:06:09.627 回答