我有正在生成一个动态库.F90文件中的以下工作状况(在Windows DLL,所以在Linux上):使用IFDEF的给了一个属性
#ifdef __linux__
subroutine FCCORR (i1,i2) bind(c, name='FCCORR')
use, intrinsic :: iso_c_binding
#endif
!
#ifdef _WIN32
subroutine FCCORR (i1,i2)
!DEC$ ATTRIBUTES DLLEXPORT, DECORATE, ALIAS : "FCCORR" :: FCCORR
!DEC$ ATTRIBUTES REFERENCE :: i1,i2
#endif
!
integer, intent(in) :: i1
integer, intent(out) :: i2
!
i2 = i1*3
!
end subroutine
我想知道,如果它是能够避免在两种不同的情况子程序的分离:我特别想知道,如果有可能使用#ifdef
只追加bind
属性,像这样:
subroutine FCCORR (i1,i2)
#ifdef __linux__
bind(c, name='FCCORR')
use, intrinsic :: iso_c_binding
#endif
!
#ifdef _WIN32
!DEC$ ATTRIBUTES DLLEXPORT, DECORATE, ALIAS : "FCCORR" :: FCCORR
!DEC$ ATTRIBUTES REFERENCE :: i1,i2
#endif
!
integer, intent(in) :: i1
integer, intent(out) :: i2
!
i2 = i1*3
!
end subroutine
但很明显,第3行产生错误:
(error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ::/ bind(c, name='TEST')
您是否尝试过#ifdef(s)内的SUBROUTINE? – Holmz
这不是Fortran 90,标签已移除。 –
@Holmz他确定他做了,看问题中的第一个代码块。 –