如果这是一个非常愚蠢的问题,我很抱歉;我的 Fortran 不太好。我正在移植一些旧的 Fortran 代码,并遇到了这个子例程定义:
SUBROUTINE SET_HYDROMODULE(HYDROMODULE)
IMPLICIT NONE
INTEGER*4 HYDROMODULE [VALUE]
...
END
英特尔 Fortran 毫不眨眼地通过了这一点,尽管启用了非标准语言功能的警告,但它会发出以下警告:
warning #7009: Attribute syntax is not standard F95
gfortran 假定这是对 coarray 规范的尝试,尽管它不是有效的规范。
有人可以告诉我 [VALUE]
子句的含义是什么吗?
编辑这是指定按值传递的非标准方式吗?是不是相当于这个:
INTEGER*4, VALUE :: HYDROMODULE
我似乎在 c 互操作性代码中经常看到它,这表明了这一点。
最佳答案
VALUE
属性是在 Fortran 2003 中添加的,因此它不适用于 Fortran 95 也就不足为奇了。Fortran 标准 (2008) 在第 5.3.18 节“VALUE 属性”中指定。根据我在那里读到的内容,需要将其指定为
INTEGER*4, VALUE :: HYDROMODULE
标准中的第 5.4.16 节定义了第二种形式,即 VALUE
语句:
INTEGER*4 :: HYDROMODULE
VALUE :: HYDROMODULE
您提供的另一种形式似乎是英特尔扩展。 gfortran supports the VALUE
attribute (至少在 4.9 版本中)。
快速搜索发现,除了确保 inter-operability VALUE
属性确实可以用于强制执行某种按值调用,从 here :
When this attribute is specified, the effect is as if the actual argument is assigned to a temporary, and the temporary is the argument associated with the dummy argument. The actual mechanism by which this happens is determined by the processor.
关于fortran - 英特尔 Fortran 值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25419534/