Уже несколько лет у меня есть возможность поддерживать и развивать код на Фортране.Я начал с компилятора Compaq df
и перешел на Intel ifort
несколько лет назад.Поэтому в моих проектах на Fortran все еще используется соглашение о вызовах cvf
.Теперь я хочу начать со смешанного языкового программирования с упором на Fortran, C и C ++.Я знаю, что есть много дискуссий и подсказок, доступных в сети, особенно поддерживаемых и отвечаемых Стивом Лайонелом, известным как доктор Фортран, то есть
https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/298583
или самой помощью Intel
https://software.intel.com/en-us/node/678228.
Соглашение о вызовах должно быть определено для компилятора Intel Fortran только для Windows с помощью языковой опции /iface:<keyword>
, где <keyword>
имеет значения default
, cref
, cvf
, [no]mixed_str_len-arg
, stdcall
и stdref
.Различия между cvf
(Compaq Visual Fortran) и 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 Fortran14.0.0063.2010 и выше
Компилятор C и C ++: Microsoft Visual C ++ 2010 и выше
Существуют ли какие-либо аргументы objectif для использования определенного соглашения о вызовах для моей цели?