Ho una libreria C ++ che fornisce varie classi per la gestione dei dati. Ho il codice sorgente per la libreria.
Voglio estendere l'API C ++ per supportare le chiamate di funzione C in modo che la libreria possa essere utilizzata con codice C e codice C ++ allo stesso tempo.
Sto usando la catena di strumenti GNU (gcc, glibc, ecc.), Quindi il supporto del linguaggio e dell'architettura non sono un problema.
Ci sono ragioni per cui questo non è tecnicamente possibile?
Ci sono trucchi a cui devo fare attenzione?
Sono disponibili risorse, codice di esempio e / o documentazione in merito?
Alcune altre cose che ho scoperto:
- Usa quanto segue per racchiudere le intestazioni C ++ che devono essere utilizzate dal codice C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Mantieni le interfacce C ++ "reali" in file di intestazione separati che non sono inclusi dal principio C. Pensa qui al principio PIMPL . Usare le
#ifndef __cplusplus #error
cose qui aiuta a rilevare qualsiasi follia. - Attento agli identificatori C ++ come nomi nel codice C.
- Enumerazioni di dimensioni variabili tra i compilatori C e C ++. Probabilmente non è un problema se stai usando la catena di strumenti GNU, ma fai comunque attenzione.
Per gli struct seguire la seguente forma in modo che C non venga confuso.
typedef struct X { ... } X
Quindi usa i puntatori per passare gli oggetti C ++, devono solo essere dichiarati in C come struct X dove X è l'oggetto C ++.
Tutto questo è per gentile concessione di un amico che è un mago in C ++.