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.

È stato utile?

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ù?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top