Ha extern “C” ha alcun effetto in C?
Domanda
Ho appena ricevuto un po 'di codice C che utilizza extern "C" per dichiarare le funzioni esterne in questo modo:
extern "C" void func();
E 'questo valido C? Ricevo un errore in questa linea, ma non sono sicuro se è a causa di questo o qualcos'altro.
Soluzione
No, non è valida C. Dovrebbe essere usato solo in codice C ++ per fare riferimento a funzioni definite nel codice C. Il extern "C"
dovrebbe essere circondato in un blocco ifdef __cplusplus
/ #endif
:
// For one function
#ifdef __cplusplus
extern "C"
#endif
void func();
// For more than one function
#ifdef __cplusplus
extern "C"
{
#endif
void func1();
void func2();
#ifdef __cplusplus
}
#endif
Altri suggerimenti
questo è un C ++ notazione per dire al compilatore / linker di utilizzare gli standard di chiamata C.
Solitamente tale linea è avvolto in una dichiarazione pre-processore.
#ifdef __cplusplus
extern "C" {
#endif
// stuff
#ifdef __cplusplus
}
#endif
Non valido in C. Se presente, dopo la pre-elaborazione questo si tradurrà in una diagnosi secondo la norma.
Per C ++, questo risulta di nome-mutilazione. Vedere questo per maggiori dettagli sul motivo per cui potrebbe essere necessario. Puoi pubblicare qualche dettaglio in più?