fcode 发表于 2015-1-18 20:57 其实,用F03的ISO C BINDING倒是易学,就是各家F和C编译器支持力度不一,譬如VC就比较坑爹 |
pasuka 发表于 2015-1-18 20:10 是。同一个公司或组织的编译器,那肯定会方便很多。 我倒不是说麻烦,而是差异大。所以较难有统一的教材。 |
fcode 发表于 2015-1-18 08:28 其实用GCC的话,C和Fortran混合编程还是挺容易的 |
好的,不客气,混编因为受编译器影响很大(不同编译器操作就不同),所以基本没有系统的教材。 但编译器通常都有帮助文件,里面会有 mix language 方面的章节可以查看。 |
fcode 发表于 2015-1-17 21:53 我对C语言和Fortran混编几乎一点儿都不知道,但是又马上要用到,混编方面能否推荐些书籍或材料,非常感谢! |
fcode 发表于 2015-1-17 21:58 非常感谢!你不知道就被这个卡住,多难受,多坑爹!路漫漫其修远兮,大恩不言谢! |
另一个简单的方法是,修改 Fortran 工程的属性,使得其接口命名为 C 语言风格: 如下图: 同时,你需要在函数名后面加上下划线,即 CALL PUSHCHARACTERARRAY(ads1buf, 512) 改为 CALL PUSHCHARACTERARRAY_(ads1buf, 512) 其他函数类同。 这样做的结果就是,Fortran内部也用了 C 语言风格的约定。 |
C 语言和 Fortran 混编不是那么简单的。 根据你的代码,我写了一个接口: [Fortran] 纯文本查看 复制代码 Module Intf Implicit None Interface Subroutine PUSHCHARACTERARRAY( a , b ) !DEC$ ATTRIBUTES DEFAULT, C , ALIAS:'_pushcharacterarray_' :: pushcharacterarray Integer :: a , b End Subroutine End Interface End Module Intf 把这个接口添加在 adBuffer.f 文件的开头。然后在 SUBROUTINE PUSHCHARACTER(x) 下方加上:Use Intf 这样就可以找到 PUSHCHARACTERARRAY 这个函数了。 其他函数请依样画葫芦。 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-12-25 22:30