2009-04-04 22 views
13

solo Tengo algo de código C que utiliza extern "C" para declarar funciones externas como esto:¿Extern "C" tiene algún efecto en C?

extern "C" void func(); 

¿Es esta válida C? Me aparece un error en esta línea, pero no estoy seguro de si es por esto o por alguna otra razón.

Respuesta

29

No, no es válido C. Solo se debe usar en el código C++ para referirse a las funciones definidas en el código C. El extern "C" debería estar rodeado en un bloque 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

esta es una notación C++ para indicar al compilador/enlazador a utilizar las normas de llamada C.

Por lo general, esa línea se envuelve en una declaración de preprocesador.

#ifdef __cplusplus 
extern "C" { 
#endif 

// stuff 

#ifdef __cplusplus 
} 
#endif 
2

No válido en C. Si está presente después del preprocesamiento, esto dará como resultado un diagnóstico según la norma.

Para C++, este cambio de nombre cambia. Consulte this para obtener más detalles sobre por qué puede ser necesario. ¿Puedes publicar más detalles?

Cuestiones relacionadas