Spec-Zone.ru › GNU Fortran 8

7.1.6 Дальнейшая совместимость Fortran с C

Техническая спецификация ISO/IEC TS 29113:2012 по дальнейшей совместимости Fortran с C расширяет поддержку совместимости Fortran 2003 и Fortran 2008. Помимо удаления некоторых ограничений, она добавляет переменные с предполагаемым типом (TYPE(*)) и предполагаемым рангом (dimension) и позволяет использовать массивы с предполагаемой формой, предполагаемым рангом и отложенной формой, включая алокабельные и указатели.

Примечание: В настоящее время GNU Fortran не поддерживает описатель массива (вектор допов), как указано в технической спецификации, но использует описатель массива с другими полями. Инструменты совместимости языка Chasm, http://chasm-interop.sourceforge.net/, предоставляют интерфейс к описателю массива GNU Fortran.

Техническая спецификация добавляет следующие новые функции, которые поддерживаются GNU Fortran:

  • Атрибут ASYNCHRONOUS был уточнён и расширен, чтобы позволить его использование с асинхронной коммуникацией в пользовательских библиотеках, таких как в реализациях спецификации Message Passing Interface.
  • Многие ограничения были ослаблены, в частности для встроенных функций C_LOC и C_F_POINTER.
  • Атрибут OPTIONAL теперь разрешен для аргументов-фикций; отсутствующий аргумент соответствует указателю NULL.
  • Были добавлены предполагаемые типы (TYPE(*)), которые могут использоваться только для аргументов-фикций. Они являются неограниченно полиморфными, но в отличие от CLASS(*), они не содержат никакой информации о типе, подобно указателям void * в C. Могут быть переданы выражения любого типа и рода; таким образом, он может быть использован в качестве замены TYPE(C_PTR), избегая использования C_LOC в вызывающей программе.

    Однако обратите внимание, что TYPE(*) принимает только скалярные аргументы, если DIMENSION не указан явно. Так как DIMENSION(*) поддерживает только массивы (включая элементы массива), но не скаляры, он не является полной заменой C_LOC. С другой стороны, аргументы-фикции предполагаемого типа и предполагаемого ранга (TYPE(*), DIMENSION(..)) позволяют передавать как скаляры, так и массивы, но требуют специального кода со стороны вызываемой программы для обработки описателя массива.

  • Массивы предполагаемого ранга (DIMENSION(..)) как аргументы-фикции позволяют передавать скаляры и массивы любого ранга в качестве фактических аргументов. Поскольку техническая спецификация не предоставляет прямого способа работы с ними, они должны использоваться либо со стороны C, либо преобразовываться с помощью C_LOC и C_F_POINTER в скаляры или массивы определённого ранга. Ранг можно определить с помощью встроенной функции RANK.

В настоящее время не реализовано:

  • GNU Fortran всегда использует описатель массива, который не соответствует описателю из технической спецификации. Заголовочный файл ISO_Fortran_binding.h и указанные в нём функции C недоступны.
  • Использование массивов с предполагаемой формой, предполагаемым рангом и отложенной формой в процедурах BIND(C) не полностью поддерживается. В частности, не поддерживаются строковые литералы C с размером другим, чем один, так как это требует нового описателя массива.

Предыдущий: Работа с указателями, Выше: Совместимость с C [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.4.0/gfortran/Further-Interoperability-of-Fortran-with-C.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API