如何使[REFERENCE]与gfortran兼容的Fortran程序?

时间:2018-01-19 18:07:34

标签: compiler-errors fortran

我正在编写在21世纪初编写的旧版Fortran代码。在此代码库中,有一些函数用于与C代码接口,并具有以下结构:

SUBROUTINE F_LIB_FOO(MY_VAR)
   !DEC$ ATTRIBUTES DLLEXPORT,STDCALL :: F_LIB_FOO
   REAL(8), INTENT(IN) :: MY_VAR [REFERENCE]
   LIB_FOO(MY_VAR) !This calls the function implemented internally

但是,当我尝试使用gfortran 4.4.7编译它时,我收到以下错误

REAL(8), INTENT(IN) :: MY_VAR  [REFERENCE]
                             1
Error: Syntax error in data declaration at (1)

我的信念是REFERENCE表示MY_VAR是通过引用传递的。但是,我找不到任何使用这种语法的示例。

根据this回答,Visual Studio支持此语法。我想知道在Linux机器上是否有类似的方法可以执行此操作,如果没有,我如何更改代码以使用gfortran进行编译并具有相同的功能。

1 个答案:

答案 0 :(得分:0)

正如链接的答案所说,[REFERENCE]属性是一个高度非标准的东西,它改变了STDCALL调用约定的行为。 Stdcall是Microsoft Win32 API和Open Watcom C ++的标准调用约定。

您也可以安全地删除Linux程序和64位Windows。

对于可能需要的情况(Win32),GCC使用!GCC$ ATTRIBUTES STDCALL,但我不确定如何在那里指定REFERENCE