Język C ++ umożliwia łączenie C ++ i C w jednym pliku źródłowym. Na przykład,
extern "C" {
struct bar { /* ... */ }
}
Czy C ++ lub czy kiedykolwiek obsługiwał inne „języki powiązań” inne niż C? np. extern "Pascal"
lubextern "Haskell"
programming-languages
c++
c
dkaranovich
źródło
źródło
extern "C"
aby ze sobą współdziałaćextern "C"
wpływa tylko na łączenie, a nie na składnię i semantykę tekstu wewnątrz bloku. Innymi słowy, nadal jest C ++ wewnątrz tegoextern "C"
bloku; nazwy symboli po prostu nie są zniekształcone. Zobacz stackoverflow.com/q/1041866/712605Odpowiedzi:
extern "C"
może być jedynym wymaganym:Jednak inne mogą istnieć zgodnie z tym cytatem:
źródło
W wielu (większości) środowiskach „extern” C jest domyślną konwencją łączenia dla dowolnego języka w systemie.
Zatem w zależności od systemu operacyjnego i implementacji „obcego” języka „extern C” wystarczy wywołać program w innym skompilowanym języku.
źródło
extern "Language"
składni „ ”, robią to za pomocą specyficznego dla platformy rozszerzenia C, więc dla C ++ jest to po prostuextern "C"
specjalne słowo kluczowe określa inną konwencję wywoływania.G ++ w pewnym momencie obsługuje
extern "Java"
interakcję z kodem Java skompilowanym przez GCJ./programming/15167867/extern-java-block-in-gcc
źródło
Nie! C ++ obsługuje tylko C jako „języki powiązań”.
extern „C” {struct bar {/ * ... * /}}
Składnia jak wyżej oznacza, że nie zmieniają nazwy zmiennej, struktury ani funkcji. Ponieważ C ++ może zmienić nazwę zmiennej, struktury lub funkcji, aby zaimplementować przeciążenie klasy, przestrzeni nazw i funkcji.
Jeśli tego nie zrobisz, linker może nie znaleźć obiektu zmiennej, struktury funkcji.
C ++ jest zaprojektowany tak, aby był kompatybilny z C. Zewnętrzny „C” jest sposobem implementacji kompatybilnym z C.
źródło
extern "C"
iextern "C++"
są jedynymi obowiązkowymi, ale implementacje mogą zapewniać inne.