J'ai une bibliothèque C ++ qui fournit diverses classes pour gérer les données. J'ai le code source de la bibliothèque.
Je souhaite étendre l'API C ++ pour prendre en charge les appels de fonction C afin que la bibliothèque puisse être utilisée avec le code C et le code C ++ en même temps.
J'utilise la chaîne d'outils GNU (gcc, glibc, etc.), donc la prise en charge du langage et de l'architecture n'est pas un problème.
Y a-t-il des raisons pour lesquelles cela n'est techniquement pas possible?
Y a-t-il des problèmes auxquels je dois faire attention?
Existe-t-il des ressources, des exemples de code et / ou de la documentation disponibles à ce sujet?
Quelques autres choses que j'ai découvertes:
- Utilisez ce qui suit pour encapsuler vos en-têtes C ++ qui doivent être utilisés par le code C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Conservez les "vraies" interfaces C ++ dans des fichiers d'en-tête séparés qui ne sont pas inclus par C. Pensez au principe PIMPL ici. Utiliser des
#ifndef __cplusplus #error
trucs aide ici à détecter toute folie. - Attention aux identifiants C ++ en tant que noms dans le code C
- Enums variant en taille entre les compilateurs C et C ++. Probablement pas un problème si vous utilisez la chaîne d'outils GNU, mais soyez prudent.
Pour les structures, suivez la forme suivante afin que C ne soit pas confus.
typedef struct X { ... } X
Ensuite, utilisez des pointeurs pour faire passer les objets C ++, il suffit de les déclarer en C comme struct X où X est l'objet C ++.
Tout cela est une gracieuseté d'un ami qui est un assistant en C ++.