如果这是一个非常愚蠢的问题,我道歉;我的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-互操作性代码中看到了很多,这表明了这一点。
答案 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:
指定此属性时,效果就像实际效果一样 参数被赋值给临时,而临时是参数 与伪论证相关联。这个的实际机制 发生的事由处理器确定。