c++ - 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>
值为default
、cref
、cvf
、和。(Compaq Visual Fortran) 和eg之间的区别在于调用机制、参数后传递的字符长度与参数列表末尾的字符长度以及通过后缀从堆栈中删除的字节数 for 。[no]mixed_str_len-arg
stdcall
stdref
cvf
default
C
STDCALL
@n
cvf
不幸的是,对于 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 参数可以为我的目的使用某个调用约定?
解决方案
推荐阅读
- plsql - 在 PL/SQL 中的游标中返回已删除的行
- android - 使用rest api将位图图像发送到服务器
- python - 如何使用 Google Adwords API 从campaing 中获取否定关键字列表
- ios - UICollectionView 滑块图像未显示
- sql-server - 关于数据库表重复值的最佳实践
- c# - 将另一个模型绑定到局部视图,例如嵌套局部视图绑定
- powershell - ' 错误消息:Get-ADUser Filter cmdlet 中的“不支持运算符:-notcontain”?
- java - 使用 Tensorflow 2 在 Android 上进行对象检测
- javascript - 如何有条件地在 jsx 中添加属性
- php - 在不修改数据库编码的情况下更正 MySQL 中的“不正确的字符串值”