"Рабочий" подход в вопросе по своей сути зависит от процессора Fortran. Это обычное устройство в некоторых операционных системах из-за исторической договоренности, но отнюдь не повсеместно. В семействе компиляторов аспекты соглашения о вызовах будут меняться в зависимости от параметров компиляции и изменяться в зависимости от версии компилятора, что может нарушить этот подход.
ISO_C_BINDING - это просто модуль, который предоставляет некоторые константы, некоторые типы и некоторые процедуры. Это тот, который указан в стандарте и предоставляется поставщиком компилятора (это внутренний модуль), но в остальном он не имеет особых полномочий.
Все эти константы, типы и процедуры помогают программисту на Фортране создавать переносимые объекты данных, указатели данных и указатели процедур, совместимые с их аналогами на языке Си. Некоторые типы и процедуры являются особыми - программист не обязательно может создать их, написав свой собственный код на Фортране.
Функциональная совместимость с C - это гораздо больше, чем использование встроенного модуля. Размещение USE ISO_C_BINDING в верхней части области видимости само по себе ничего не меняет, кроме того, что делает определенные идентификаторы доступными.
Атрибут BIND (C) должен применяться к переменным, производным типам, общим блокам и процедурам, которые должны взаимодействовать между C и Fortran. В некоторых случаях этот атрибут также указывает имя привязки (имя C) для объекта. Для производных и общих типов это может изменить выравнивание и порядок компонентов, в то время как для процедур это может изменить аспекты соглашения о вызове процедуры.
Существует также набор требований к природе взаимодействующих объектов данных и процедур, которым должен следовать программист.
(Комментарий «К сожалению ...» на связанной вики-странице fortran кажется неправильным пониманием того, как присваивание массиву символов работает в Фортране - он не имеет ничего общего с функциональной совместимостью C как таковой, за исключением требования, что это LEN = 1 символьные массивы в Фортране, которые совместимы с массивами символов C.)
Если набор целевых компиляторов для конкретного проекта поддерживает необходимые части Fortran 2003, то я не могу придумать веских причин, чтобы не использовать функции совместимости C языка Fortran 2003. Улучшение надежности и переносимости результирующего кода, которое приводит к от использования этой функции убедительно.
person
IanH
schedule
22.10.2013