Spec-Zone.ru › GNU Fortran 11

7.2.1 Директива ATTRIBUTES

Стандарт Fortran описывает, как должен вести себя соответствующий программа, однако точная реализация не стандартизирована. Для того, чтобы позволить пользователю выбирать конкретные детали реализации, можно использовать директивы компилятора для установки атрибутов переменных и процедур, которые не являются частью стандарта. Поддержка конкретного атрибута и его точное влияние зависят как от операционной системы, так и от процессора; см. Расширения C в Руководстве по использованию GNU Compiler Collection (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-11.1.0/gfortran/ATTRIBUTES-directive.html

Spec-Zone.ru

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