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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top