fortran - 英特尔 Fortran 值属性

标签 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 互操作性代码中经常看到它,这表明了这一点。

最佳答案

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/

相关文章:

compiler-construction - 使用ifort 11.0编译时出现语法错误

linux - Fortran 位置 ='append' 不起作用

fortran - 如何将输出写入 Fortran 中的字符串?

fortran - GFortran 等效于 ieee_exceptions

fortran - 英特尔的-heap-arrays的gfortran标志[大小]

c - Fortran/C 互操作性将结构从 Fortran 传递到带有可分配项的 C

fortran - 为什么具有可分配组件的 coarray 在从不同图像访问时会产生分割错误?

fortran - 将命令行参数解析为字符串以在 Fortran 中存储整数

excel - 通过类型将字符数组从 VBA 传递到 Fortran DLL 会破坏其他类型成员

multithreading - Openmp:与omp_get_thread_num()并行使用