Использование библиотеки C ++ в коде C
У меня есть библиотека 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. ThinkПринцип PIMPL Вот. С помощью#ifndef __cplusplus #error
вещи помогают здесь обнаружить любое сумасшествие.Осторожно идентификаторы C ++ как имена в коде CПеречисления, различающиеся по размеру между компиляторами C и C ++. Вероятно, не проблема, если вы используете цепочку инструментов GNU, но все же, будьте осторожны.Для структур следуйте следующей форме, чтобы C не запутался.
typedef struct X { ... } X
Затем используйте указатели для передачи объектов C ++, их просто нужно объявить в C как struct X, где X - это объект C ++.
Все это любезно предоставлено другом, который является волшебником в C ++.