C ++ Linkage Lingue diverse da C?

25

Il linguaggio C ++ consente il mescolamento di C ++ e C in un unico file sorgente. Ad esempio,

extern "C" {
    struct bar { /* ... */ }
}

C ++ o ha mai supportato altri "linguaggi di collegamento" diversi da C? per esempio. extern "Pascal" o extern "Haskell"

    
posta dkaranovich 23.08.2013 - 02:39
fonte

4 risposte

17

extern "C" potrebbe essere l'unico richiesto:

Every implementation shall provide for linkage to functions written in the C programming language, "C", and linkage to C++ functions, "C++".

Tuttavia altri possono esistere come da questa citazione:

The string-literal indicates the required language linkage. This International Standard specifies the semantics for the string-literals "C" and "C++". Use of a string-literal other than "C" or "C++" is conditionally- supported, with implementation-defined semantics. [ Note: Therefore, a linkage-specification with a string- literal that is unknown to the implementation requires a diagnostic. — end note ] [ Note: It is recommended that the spelling of the string-literal be taken from the document defining that language. For example, Ada (not ADA) and Fortran or FORTRAN, depending on the vintage. — end note ]

    
risposta data 23.08.2013 - 04:33
fonte
9

In molti (la maggior parte) ambienti "extern" C "è la convenzione di collegamento predefinita per qualsiasi lingua del sistema.

Quindi, a seconda del sistema operativo e dell'implementazione della lingua "straniera", "extern C" è tutto ciò che serve per chiamare un programma in un'altra lingua compilata.

    
risposta data 23.08.2013 - 03:13
fonte
7

G ++ a un certo punto supporta extern "Java" per interagire con il codice Java compilato da GCJ.

link

    
risposta data 28.08.2013 - 17:59
fonte
-4
  • No! C ++ supporta solo C come "linguaggi di collegamento".

  • extern "C" { struct bar {/ * ... * /} }

  • La sintassi come sopra significa che non modificare il nome di variabile, struct o funzione. Perché C ++ può cambiare il nome di variabile, struct o funzione per implementare Class, Namespace e overloading di funzioni.

  • Se non lo fai, il linker potrebbe non scoprire l'oggetto della variabile, struct of function.

  • C ++ è progettato per essere compatibile con C. L'extern "C" è il modo per implementare compatibile con C.

risposta data 23.08.2013 - 04:15
fonte

Leggi altre domande sui tag