2009-04-04 13 views
13

Ho appena ricevuto un po 'di codice C che utilizza extern "C" per dichiarare le funzioni esterne come questo:La "C" esterna ha qualche effetto in C?

extern "C" void func(); 

È questo valido C? Sto ricevendo un errore in questa riga, ma non sono sicuro che sia per questo o per qualcos'altro.

risposta

29

No, non è valido C. Dovrebbe essere utilizzato solo in codice C++ per fare riferimento alle funzioni definite nel codice C. Il extern "C" dovrebbe essere circondati 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 
11

questa è una notazione C++ per dire al compilatore/linker di utilizzare gli standard di chiamata C.

In genere questa riga è racchiusa in una dichiarazione di pre-elaborazione.

#ifdef __cplusplus 
extern "C" { 
#endif 

// stuff 

#ifdef __cplusplus 
} 
#endif 
2

Non valido in C. Se presente dopo la preelaborazione ciò comporterà una diagnostica secondo la norma.

Per C++, questo giro di manomissione del nome. Vedere this per ulteriori dettagli sul motivo per cui potrebbe essere necessario. Puoi pubblicare altri dettagli?