Поддержка и использование ключевого слова `fortran` в C - PullRequest
6 голосов
/ 25 сентября 2019

В стандарте C определено опционально поддерживаемое ключевое слово fortran

Стандарт языка C99, раздел J.5.9:

Можно использовать спецификатор функции fortranв объявлении функции, чтобы указать, что должны быть сгенерированы вызовы, подходящие для FORTRAN, или что должно быть сгенерировано другое представление для внешнего имени.

Этот раздел остается неизменным в стандарте C11.

Больше ни в одном стандарте больше ничего не говорится об этом ключевом слове.Этот раздел ссылается на раздел 6.7.4, «Спецификаторы функций», который выглядит так, как кажется, но единственным является inline, а язык, к которому он относится, адаптируется к этому, и как можно использовать fortran, неясно.

Ключевое слово - это , содержащееся в разделе «Общие расширения» (!), Поэтому универсальной поддержки не ожидается и, действительно, ее нет: моя копия GCC 7.2.0 не 'не могу распознать это.

Так как я не могу его использовать,а) Как можно использовать ключевое слово fortran в C-коде?б) Какие компиляторы поддерживают / поддерживают это ключевое слово?

1 Ответ

4 голосов
/ 25 сентября 2019

Компилятор BC4.5 для DOS / Win16 поддерживает указанное ключевое слово.Он изменяет соглашение о вызовах функции на соглашение о вызовах FORTRAN.Использование выглядит следующим образом:

extern fortran int FUNCTION(int *a, int *b, int *c);

(переменные передаются по ссылке в FORTRAN).

Вы также можете экспортировать функцию, которая будет вызываться из FORTRAN, так:

fortran int FUNCTION2(int *a, int *b, int *c)
{
    /* your code here */
}

Я фактически использовал его для вызова в QBX (BASIC), который использует почти точно такое же соглашение о вызовах.Ключевое слово pascal было лучше для этой цели;в противном случае аргументы приходят назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...