winston2017 发表于 2017-4-25 09:03 不加额外申明,C程序哪里认得elpTime这个全局变量 |
pasuka 发表于 2017-4-25 08:48 1、在module那里定义的elpTime不是全局变量吗?为什么还需要按照这个来定义? 2、不好意思误导您了,贴出来的是我代码的一部分,在原代码中前面有赋值的。 3、非常感谢您的回答! |
1、通过ISO C BINDING可以让C访问Fortran的全局变量,虽然不推荐,参考: Interoperable Global Variables - The GNU Fortran Compiler https://gcc.gnu.org/onlinedocs/g ... le-Global-Variables 2、elpTime变量为啥没有赋初值? |
看起来似乎没有问题(在混编接口部分)。断点单步调试一下吧,也许是开源软件的事儿。 此外,你这种混编方法太老土了。有更新潮(主要是规范)的混编方式: [Fortran] 纯文本查看 复制代码 module cprog interface integer function SWMMSTEP(elpTime) !DEC$ ATTRIBUTES C, ALIAS:'swmm_step'::SWMMSTEP !DEC$ ATTRIBUTES REFERENCE::elpTime real(kind=8)::elpTime end function end interface real(kind=8)::elpTime !全局变量 end module cprog program F90useVCdll use cprog implicit none integer::errorNum do !do_01 errorNum=SWMMSTEP(elpTime) if ((elpTime <= 0.0).or.(errorNum .ne. 0)) exit enddo end program |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2025-4-20 20:08