Será externo “C” tem qualquer efeito no C?
Pergunta
Eu só tenho algum código C que usa extern "C" para declarar funções externas como esta:
extern "C" void func();
É este válida C? Estou recebendo um erro nesta linha, mas não tenho certeza se é por causa deste ou qualquer outra coisa.
Solução
Não, não é válido C. Ele só deve ser usado em código C ++ para se referir a funções definidas em código C. O extern "C"
deve ser cercada em um bloco 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
Outras dicas
este é um C ++ notação para dizer ao compilador / vinculador a usar C chamando padrões.
Normalmente, essa linha é envolto em uma declaração pré-processador.
#ifdef __cplusplus
extern "C" {
#endif
// stuff
#ifdef __cplusplus
}
#endif
Não é válido em C. Se estiver presente após pré-processamento isso irá resultar em um diagnóstico de acordo com o padrão.
Para C ++, isso se transforma de nome-mangling. Consulte este para mais detalhes a respeito de porque ele pode ser necessária. você pode enviar mais alguns detalhes?