英特尔Fortran值属性

时间:2014-08-21 06:25:28

标签: fortran gfortran intel-fortran

如果这是一个非常愚蠢的问题,我道歉;我的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-互操作性代码中看到了很多,这表明了这一点。

1 个答案:

答案 0 :(得分:1)

Fortran 2003中添加了VALUE属性,因此它不适用于Fortran 95就不足为奇了.Fortran Standard(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

  

指定此属性时,效果就像实际效果一样   参数被赋值给临时,而临时是参数   与伪论证相关联。这个的实际机制   发生的事由处理器确定。