Ich habe eine C ++ - Bibliothek, die verschiedene Klassen zum Verwalten von Daten bereitstellt. Ich habe den Quellcode für die Bibliothek.
Ich möchte die C ++ - API erweitern, um C-Funktionsaufrufe zu unterstützen, damit die Bibliothek gleichzeitig mit C-Code und C ++ - Code verwendet werden kann.
Ich verwende die GNU-Toolkette (gcc, glibc usw.), sodass die Unterstützung von Sprache und Architektur kein Problem darstellt.
Gibt es Gründe, warum dies technisch nicht möglich ist?
Gibt es irgendwelche Fallstricke, auf die ich achten muss?
Gibt es dazu Ressourcen, Beispielcode und / oder Dokumentation?
Einige andere Dinge, die ich herausgefunden habe:
- Verwenden Sie Folgendes, um Ihre C ++ - Header zu verpacken, die von C-Code verwendet werden müssen.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Bewahren Sie "echte" C ++ - Schnittstellen in separaten Header-Dateien auf, die nicht im C enthalten sind. Denken Sie hier an das PIMPL-Prinzip . Die Verwendung von
#ifndef __cplusplus #error
Dingen hilft hier, Verrücktheit zu erkennen. - Vorsicht vor C ++ - Bezeichnern als Namen im C-Code
- Aufzählungen unterschiedlicher Größe zwischen C- und C ++ - Compilern. Wahrscheinlich kein Problem, wenn Sie die GNU-Toolkette verwenden, aber seien Sie trotzdem vorsichtig.
Folgen Sie für Strukturen dem folgenden Formular, damit C nicht verwechselt wird.
typedef struct X { ... } X
Verwenden Sie dann Zeiger zum Übergeben von C ++ - Objekten. Sie müssen nur in C als Struktur X deklariert werden, wobei X das C ++ - Objekt ist.
All dies wurde freundlicherweise von einem Freund zur Verfügung gestellt, der ein Assistent bei C ++ ist.