Как известно, декларирование extern "C"
для C ++ функция делает свое имя связанным с C, позволяя ссылаться на C-код.
Мой вопрос — есть ли другие языки программирования, с которыми мы можем связать имена функций C ++, что-то вроде extern "Lisp"
или же extern "FORTRAN"
?
Если нет, то почему? Какова внутренняя структура позади "C"
что делает ограничения?
Какие есть альтернативы?
Стандарт 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 ++.
Других решений пока нет …