首页 > 解决方案 > Fortran 中使用 C 和 C++ 进行混合语言编程的最佳调用约定是什么?

问题描述

几年来,我有机会维护和开发 Fortran 代码。几年前,我开始使用 Compaq 编译器df并切换到 Intel编译器。ifort因此我的 Fortran 项目仍然使用调用约定cvf。现在,我想从混合语言编程开始,重点是 Fortran、C 和 C++。我知道网络上有很多讨论和提示,特别是由 Steve Lionel aka Dr. Fortran 支持和回答,即

https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/298583

或英特尔帮助自己

https://software.intel.com/en-us/node/678228

必须通过语言选项为英特尔 Fortran 编译器(仅适用于 Windows)定义调用约定,其中/iface:<keyword><keyword>值为defaultcrefcvf、和。(Compaq Visual Fortran) 和eg之间的区别在于调用机制、参数后传递的字符长度与参数列表末尾的字符长度以及通过后缀从堆栈中删除的字节数 for 。[no]mixed_str_len-argstdcallstdrefcvfdefaultCSTDCALL@ncvf

不幸的是,对于 Fortran、C 和 C++ 之间的混合语言编程,哪种调用约定是最好的或应该是首选的,我还没有找到一个明确的声明。
那么,哪种调用约定最好,您提出建议的原因是什么?

最后但并非最不重要的一点是,我想在 Fortran、C 和 C++ 之间交换字符/字符串,尤其是当我想使用 C++ 库进行 Ini 文件处理时,例如

https://www.codeproject.com/Articles/5401/CIni

交换的字符串不应包含char(0)标签字符串结尾。我想使用 CIni 作为我的 Fortran 软件的动态库。另一方面,我还想将 Fortran 代码作为 C++ 的动态库提供。

目标操作系统:Windows
架构:IA-32
IDE:Visual Studio
Fortran 编译器:Intel Fortran 14.0.0063.2010 及更高版本
C 和 C++ 编译器:Microsoft Visual C++ 2010 及更高版本

是否有任何 objectif 参数可以为我的目的使用某个调用约定?

标签: c++cfortrancalling-conventionfortran-iso-c-binding

解决方案


推荐阅读