几年以来,我有机会维护和开发Fortran代码。几年前,我开始使用Compaq编译器df
并切换到Intel ifort
。因此,我的Fortran项目仍然使用调用约定cvf
。
现在,我想从混合语言编程开始,重点是Fortran,C和C ++。我知道网上有很多讨论和提示,特别是Steve Lionel又称Fortran博士支持和回答,即
https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/298583
或英特尔帮助自己
https://software.intel.com/en-us/node/678228
必须通过语言选项/iface:<keyword>
为英特尔Fortran编译器定义调用约定,其中<keyword>
的值为default
,cref
,{{ 1}},cvf
,[no]mixed_str_len-arg
和stdcall
。 stdref
(Compaq Visual Fortran)和cvf
之间的差异,例如对于调用机制,default
与C
相关,在参数列表之后传递的字符长度与在参数列表末尾之间传递的字符长度以及通过STDCALL
后缀从@n
后缀移除的字节数}}
不幸的是,我还没有找到一个明确的声明,说明哪个调用约定是最好的,或者是Fortran,C和C ++之间混合语言编程的首选。
那么,哪种呼叫惯例是最好的,你的建议是什么原因?
最后,但并非最不重要的是,我想在Fortran,C和C ++之间交换字符/字符串,特别是因为我想使用C ++库进行Ini文件处理,例如。
https://www.codeproject.com/Articles/5401/CIni
交换的字符串不应包含cvf
来标记字符串结尾。
我想使用CIni作为我的Fortran软件的动态库。
另一方面,我也希望将Fortran代码作为动态库提供给C ++。
目标操作系统:Windows
建筑:IA-32
IDE:Visual Studio
Fortran编译器:英特尔Fortran 14.0.0063.2010及更高版本
C和C ++编译器:Microsoft Visual C ++ 2010及更高版本
为了我的目的,是否存在使用某种调用约定的客观论点?