我正在编写在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
进行编译并具有相同的功能。
答案 0 :(得分:0)
正如链接的答案所说,[REFERENCE]
属性是一个高度非标准的东西,它改变了STDCALL调用约定的行为。 Stdcall是Microsoft Win32 API和Open Watcom C ++的标准调用约定。
您也可以安全地删除Linux程序和64位Windows。
对于可能需要的情况(Win32),GCC使用!GCC$ ATTRIBUTES STDCALL
,但我不确定如何在那里指定REFERENCE
。