我有正在生成一個動態庫.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他確定他做了,看問題中的第一個代碼塊。 –