связь — внешняя C ++ & quot; C & quot; функциональность для языков, отличных от C

Как известно, декларирование extern "C" для C ++ функция делает свое имя связанным с C, позволяя ссылаться на C-код.

Мой вопрос — есть ли другие языки программирования, с которыми мы можем связать имена функций C ++, что-то вроде extern "Lisp" или же extern "FORTRAN"?

Если нет, то почему? Какова внутренняя структура позади "C"что делает ограничения?

Какие есть альтернативы?

4

Решение

Стандарт C ++, 7.5.2 dcl.link, гласит:

Связь между фрагментами кода C ++ и не-C ++ может быть достигнута с помощью
Связь-спецификации:

linkage-specification:
extern string-literal { declaration-seqopt}
extern string-literal declaration

Строковый литерал указывает на необходимую языковую связь. это
Международный стандарт определяет семантику для строковых литералов
«C» и «C ++». Использование строкового литерала, отличного от «C» или «C ++»,
условно поддерживается с определенной семантикой реализации. [ Заметка:
Следовательно, спецификация связи со строковым литералом, который
неизвестная реализация требует диагностики. — Конец примечания] [
Примечание. Рекомендуется, чтобы написание строкового литерала было
взято из документа, определяющего этот язык. Например, Ада (не
ADA) и Фортран или Фортран, в зависимости от винтажа. —Конечная записка]

Таким образом, в принципе, разработчики могут выбрать поддержку других спецификаций связывания, кроме C и C ++.

Однако на практике на всех современных платформах связь C является наименьшим общим знаменателем. Как правило, в наши дни двоичное взаимодействие для языков, отличных от C, использует связь C. На широко используемых современных платформах вы не увидите ничего, кроме связей C и C ++.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector