У меня есть библиотека C ++, которая предоставляет различные классы для управления данными. У меня есть исходный код библиотеки.
Я хочу расширить API C ++ для поддержки вызовов функций C, чтобы библиотеку можно было использовать с кодом C и кодом C ++ одновременно.
Я использую цепочку инструментов GNU (gcc, glibc и т. Д.), Поэтому поддержка языка и архитектуры не является проблемой.
Есть ли причины, по которым это технически невозможно?
Есть ли какие-то проблемы, которых мне нужно остерегаться?
Есть ли по этому поводу ресурсы, примеры кода и / или документация?
Еще кое-что, что я выяснил:
- Используйте следующее, чтобы обернуть заголовки C ++, которые должны использоваться кодом C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Храните «настоящие» интерфейсы C ++ в отдельных файлах заголовков, которые не включены в C. Подумайте о принципе PIMPL . Использование
#ifndef __cplusplus #error
вещей помогает здесь обнаружить любое безумие. - Осторожно с идентификаторами C ++ как именами в коде C
- Перечисления различаются по размеру в компиляторах C и C ++. Возможно, это не проблема, если вы используете цепочку инструментов GNU, но все же будьте осторожны.
Для структур используйте следующую форму, чтобы не запутать C.
typedef struct X { ... } X
Затем используйте указатели для передачи объектов C ++, их просто нужно объявить в C как struct X, где X - объект C ++.
Все это любезно предоставил друг, который специализируется на C ++.