Язык C ++ позволяет смешивать как C ++, так и C в одном исходном файле. Например,
extern "C" {
struct bar { /* ... */ }
}
Поддерживает ли C ++ или когда-либо поддерживал какие-либо другие «языки связей», кроме C? например extern "Pascal"
илиextern "Haskell"
programming-languages
c++
c
dkaranovich
источник
источник
extern "C"
самое, что и взаимодействовать друг с другомextern "C"
влияет только на связь, а не на синтаксис и семантику текста внутри блока. Другими словами, это все еще C ++ внутри этогоextern "C"
блока; имена символов просто не искажены. См. Stackoverflow.com/q/1041866/712605Ответы:
extern "C"
может быть единственным обязательным:Однако другие могут существовать согласно этой цитате:
источник
Во многих (большинстве) средах "extern" C "является соглашением о связывании по умолчанию для любого языка в системе.
Поэтому в зависимости от операционной системы и реализации «иностранного» языка «extern C» - это все, что вам нужно для вызова программы на другом скомпилированном языке.
источник
extern "Language"
синтаксиса " ", они делают это через расширение C для конкретной платформы, поэтому для C ++ это все еще справедливоextern "C"
и особенное Ключевое слово определяет другое соглашение о вызовах.G ++ в какой-то момент поддерживал
extern "Java"
взаимодействие с Java-кодом, скомпилированным GCJ./programming/15167867/extern-java-block-in-gcc
источник
Нет! C ++ поддерживает только C как «языки связи».
extern "C" {struct bar {/ * ... * /}}
Синтаксис, приведенный выше, означает, что не следует изменять имя переменной, структуры или функции. Потому что C ++ может изменить имя переменной, структуры или функции для реализации перегрузки класса, пространства имен и функции.
Если вы этого не сделаете, компоновщик может не найти объект переменной, структуру функции.
C ++ разработан для совместимости с C. Внешний "C" - это способ реализации совместимого с C.
источник
extern "C"
иextern "C++"
являются единственными обязательными, но реализации могут предоставлять другие.