A linguagem C ++ permite a mistura de C ++ e C em um arquivo de origem. Por exemplo,
extern "C" {
struct bar { /* ... */ }
}
O C ++ ou já suportou outras "linguagens de ligação" que não o C? por exemplo extern "Pascal"
ouextern "Haskell"
programming-languages
c++
c
dkaranovich
fonte
fonte
extern "C"
equivalente a interagir uns com os outrosextern "C"
afeta apenas a ligação, não a sintaxe e a semântica do texto dentro do bloco. Em outras palavras, ainda é C ++ dentro desseextern "C"
bloco; os nomes dos símbolos não são mutilados. Veja stackoverflow.com/q/1041866/712605Respostas:
extern "C"
pode ser o único necessário:No entanto, outros podem existir conforme esta citação:
fonte
Em muitos ambientes (a maioria), "extern" C "é a convenção de vinculação padrão para qualquer idioma no sistema.
Portanto, dependendo do sistema operacional e da implementação da linguagem "estrangeira" "extern C" é tudo o que você precisa para chamar um programa em outra linguagem compilada.
fonte
extern "Language"
sintaxe " ", eles fazem isso através da extensão C específica da plataforma, portanto, para C ++, ainda é justoextern "C"
e o especial A palavra-chave especifica a convenção de chamada diferente.Em algum momento, o G ++ é suportado
extern "Java"
para interagir com o código Java compilado pelo GCJ./programming/15167867/extern-java-block-in-gcc
fonte
Não! O C ++ suporta apenas C como "linguagens de ligação".
extern "C" {barra de estrutura {/ * ... * /}}
A sintaxe como acima significa que não altera o nome da variável, estrutura ou função. Como o C ++ talvez altere o nome da variável, estrutura ou função para implementar Classe, Espaço para Nome e sobrecarga de função.
Se você não fizer isso, o vinculador talvez não consiga descobrir o objeto da variável, estrutura da função.
C ++ foi projetado para ser compatível com C. O "C" externo é a maneira de implementar compatível com C.
fonte
extern "C"
eextern "C++"
são os únicos obrigatórios, mas as implementações podem fornecer outros.