Fortran 中的 STRUCTURE 和 TYPE 之间是否存在有效差异?

Is there an effective difference between STRUCTURE and TYPE in Fortran?

我的问题很简单。我继承了一些旧的 Fortran 代码,我正在浏览它以对它有一个大致的了解。我注意到它使用的是 STRUCTURE 而不是 TYPE。两者之间有什么实际区别吗?除了更符合标准之外,使用 TYPE 还有其他好处吗?

这个问题比较哲学。我(认为我)知道重写代码在测试等方面意味着什么,所以我不是在寻找 "is it really worth it" 那种答案。更多的是技术性的。

我阅读了一些关于 STRUCTURE 和 TYPE 的内容,第一个在互联网上,第二个在 "Modern Fortran explained" 中,但除了 "this is how it was done before Fortran 90, this is how we do it today".

之外我没有找到更多信息

"but I did not find more information other than 'this is how it was done before Fortran 90, this is how we do it today'"

那是因为它确实是那样的。 Fortran 90中除此之外就没有太多了。

当然,Fortran 2003 及更高版本的所有改进都只保证标准类型(但任何编译器都可以随心所欲地处理结构)。这意味着可分配(甚至指针)组件、类型扩展和多态性(class)、类型绑定过程、终结、参数化派生类型、用户定义 I/O...

所有这些在标准中仅适用于标准类型。该标准根本没有提及非标准结构。我不确定某些编译器是否允许在其结构中使用指针组件(Fortran 90 功能)或可分配组件(F2003),我不太在意。说明书上应该有。

STRUCTURE/RECORD 是 1980 年代中期的 DEC Fortran 扩展,早于 Fortran 90 标准和派生类型。一般来说,两者在一个主要方面有所不同——STRUCTURE 可以有 UNION,标准 Fortran 没有这样的概念。

您可以在 STRUCTURE 中使用多少更新的标准功能取决于特定的编译器。 DEC 继承编译器(Compaq 和 Intel)几乎将它们视为等价物,只有一些小例外。 (例如,您不能在 STRUCTURE 中使用 SEQUENCE。)其他编译器可能更严格。

我的建议是使用标准的派生类型语法,除非你必须有联合,然后认识到你的代码的可移植性被最小化了。