6.2.1 Директива ATTRIBUTES
Стандарт Fortran описывает, как должно вести себя совместимое приложение; однако точная реализация не стандартизована. Для того, чтобы позволить пользователю выбрать определённые детали реализации, можно использовать директивы компилятора для установки атрибутов переменных и процедур, которые не являются частью стандарта. Поддержка данного атрибута и его точное влияние зависят как от операционной системы, так и от процессора; см. Расширения языка C в Руководстве по использованию GNU компилятора C (GCC) для получения подробной информации.
Для процедур и указателей на процедуры можно использовать следующие атрибуты для изменения соглашения о вызовах:
-
CDECL– стандартное соглашение о вызовах C -
STDCALL– соглашение, где вызываемая процедура удаляет стек -
FASTCALL– часть аргументов передаётся через регистры вместо стека
Помимо изменения соглашения о вызовах, атрибуты также влияют на формирование имени символа, например, с ведущим нижним подчёркиванием или с последующим знаком «@» и числом байтов в стеке. При назначении процедуры указателю на процедуру обе должны использовать одинаковое соглашение о вызовах.
На некоторых системах процедурам и глобальным переменным (переменным модуля и блокам COMMON ) требуется специальная обработка для доступа к ним, когда они находятся в общей библиотеке. Доступны следующие атрибуты:
-
DLLEXPORT– предоставляет глобальный указатель на указатель в DLL -
DLLIMPORT– ссылается на функцию или переменную с использованием глобального указателя
Для аргументов-фикций можно использовать атрибут NO_ARG_CHECK; в других компиляторах он также известен как IGNORE_TKR. Для аргументов-фикций с этим атрибутом допускаются фактические аргументы любого типа и рода (аналогично TYPE(*)), скаляры и массивы любого ранга (нет эквивалента в стандарте Fortran). Как и в случае с TYPE(*), аргумент является неограниченно полиморфным, и никакая информация о типе недоступна. Кроме того, аргумент может передаваться только аргументам-фикциям с атрибутом NO_ARG_CHECK, в качестве аргумента встроенной функции PRESENT, и к C_LOC модуля ISO_C_BINDING.
Переменные с атрибутом NO_ARG_CHECK должны быть типа «assumed-type» (TYPE(*); рекомендуется) или типа INTEGER, LOGICAL, REAL или COMPLEX. Они не должны иметь атрибуты ALLOCATE, CODIMENSION, INTENT(OUT), POINTER или VALUE; кроме того, они должны быть скалярами или иметь размер «assumed-size» (dimension(*)). Как и TYPE(*), атрибут NO_ARG_CHECK требует явного интерфейса.
-
NO_ARG_CHECK– отключение проверки типа, рода и ранга -
DEPRECATED– вывод предупреждения при использовании помеченной устаревшей процедуры, переменной или параметра; предупреждение может быть подавлено с помощью -Wno-deprecated-declarations.
Атрибуты указываются с помощью синтаксиса
!GCC$ ATTRIBUTES список-атрибутов :: список-переменных
где в исходном коде с свободным форматом допускаются только пробелы перед !GCC$, а в исходном коде с фиксированным форматом !GCC$, cGCC$ или *GCC$ должны начинаться с первой колонки.
Для процедур директивы компилятора должны быть размещены в теле процедуры; для переменных и указателей на процедуры они должны находиться в той же части объявления, что и переменная или указатель на процедуру.
Далее: Директива UNROLL, Вверх: Директивы компилятора GNU Fortran [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.1.0/gfortran/ATTRIBUTES-directive.html