编辑:Gfortran 6 现在支持这些扩展 :)
我有一些广泛使用 UNION 和 MAP 的旧 f77 代码。我需要使用不支持这些扩展的 gfortran 编译它。我已经想出了如何转换除这些之外的所有不支持的扩展,我不知所措。我对可能的方法有几个想法,但未能成功实施任何东西。我需要以与当前相同的方式访问现有的 UDT;我可以重新实现 UDT,但它们的接口不能改变。
我所拥有的示例:
TYPE TEST
UNION
MAP
INTEGER*4 test1
INTEGER*4 test2
END MAP
MAP
INTEGER*8 test3
END MAP
END UNION
END TYPE
必须通过以下方式访问元素:TEST%test1、TEST%test2、TEST%test3
到目前为止我的想法:
- 以某种方式替换为 fortran EQUIVALENCE。
- 在 C/C++ 中定义结构并以某种方式使它们对 FORTRAN 代码可见(怀疑这是可能的)
我想当 UNION 和 MAP 被排除在标准之外时,f77 到 f90/95 一定有很多重构。如果有/被处理过怎么办?
编辑:接受的答案有一个允许内存重叠的解决方法,但就保留 API 而言,这是不可能的。