【发布时间】:2019-06-03 10:05:33
【问题描述】:
我有两组全局变量,每组都存储在一个名为 common 的块中,如下所示:
integer :: x1, y1, z1, x2, y2, z2
common/vars/ x1, y1, z1
common/vars/ x2, y2, z2
我希望能够对这些变量做两件不同的事情:
- 将每组变量的值存储在一个数组中,这样最终的结果就是
integer :: a(3) = (/ x1, y1, z1 /), b(3) = (/ x2, y2, z2 /)定义的数组 - 将第二组中的值存储在第一组的对应变量中。即:
x1 = x2、y1 = y2和z1 = z2。
但是,在实际代码中,每组中的变量多于 3 个。因此我希望能够使用循环来做到这一点。在 C/C++ 中,我可以通过递增指针轻松地做到这一点。但是,指针在 Fortran 中的工作方式不同。有没有办法做到这一点?
【问题讨论】:
-
是的。但是请不要这样做,也请不要使用 common,这是 2019 年而不是 1978 年。相反,请告诉我们您为什么要这样做,让我们为您的问题找到一个现代解决方案。
-
我正在对代码库进行现代化改造。相信我,我很清楚应该避免常见的块。我只是在准备使用 plusFORT 将代码库翻译成现代 Fortran。为了准备好它,我必须去掉一些等价语句(因为 plusFORT 不支持这些语句),这就是我需要这样做的原因。一旦我可以运行 plusFORT,它实际上会自动将常用块转换为模块。
-
我已经展示了如何在 Fortran 中使用类似 C 的指针算法以及
transfer、stackoverflow.com/questions/50280739/… 的一点点,这并不是我推荐它或保证它是可移植的。您可以只声明数组并将标量设为指向该数组的指针。
标签: pointers fortran fortran-common-block