Eu tenho uma biblioteca C ++ que oferece várias classes para gerenciamento de dados. Eu tenho o código-fonte da biblioteca.
Quero estender a API C ++ para oferecer suporte a chamadas de função C para que a biblioteca possa ser usada com código C e código C ++ ao mesmo tempo.
Estou usando a cadeia de ferramentas GNU (gcc, glibc, etc), portanto, o suporte a linguagem e arquitetura não é um problema.
Há alguma razão pela qual isso não seja tecnicamente possível?
Há alguma pegadinha que eu preciso tomar cuidado?
Existem recursos, código de exemplo e / ou documentação disponível sobre isso?
Algumas outras coisas que descobri:
- Use o seguinte para envolver seus cabeçalhos C ++ que precisam ser usados pelo código C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Mantenha as interfaces C ++ "reais" em arquivos de cabeçalho separados que não estão incluídos em C. Pense no princípio PIMPL aqui. Usar
#ifndef __cplusplus #error
coisas ajuda aqui a detectar qualquer loucura. - Cuidado com os identificadores C ++ como nomes no código C
- Enums variando em tamanho entre compiladores C e C ++. Provavelmente não é um problema se você estiver usando a cadeia de ferramentas GNU, mas ainda assim, tome cuidado.
Para structs, siga a seguinte forma para que C não se confunda.
typedef struct X { ... } X
Em seguida, use ponteiros para passar objetos C ++, eles apenas precisam ser declarados em C como struct X, onde X é o objeto C ++.
Tudo isso é cortesia de um amigo que é um mago em C ++.