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

时间:2017-09-21 09:18:37

标签: types fortran structure fortran90 fortran77

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

这个问题更具有哲学性。我(我想)知道重写代码在测试等方面意味着什么,所以我不是在寻找那种“真的值得”的答案。更多的是技术性的。

我读了一下STRUCTURE和TYPE,第一个在interwebs上,第二个在“现代Fortran解释”中,但我没有找到更多的信息,“这是在Fortran 90之前完成的,这是我们今天怎么做“。

2 个答案:

答案 0 :(得分:1)

"但除了'之外我没有找到更多信息。这是在Fortran 90之前完成的,这就是我们今天的做法'"

那是因为它真的是那样的。除了Fortran 90之外没有太多。

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

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

答案 1 :(得分:1)

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

您可以在STRUCTURE中使用多少较新的标准功能取决于特定的编译器。 DEC-heritage编译器(Compaq和Intel)几乎将这些视为等价物,但有一些小的例外。 (例如,你不能在结构中说SEQUENCE。)其他编译器可能更具限制性。

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