У мене є бібліотека C ++, яка пропонує різні класи для управління даними. У мене є вихідний код для бібліотеки.
Я хочу розширити API C ++ на підтримку викликів функцій C, щоб бібліотека могла одночасно використовуватися з кодом C та кодом C ++.
Я використовую ланцюжок інструментів GNU (gcc, glibc тощо), тому підтримка мови та архітектури не є проблемою.
Чи є причини, чому це технічно неможливо?
Чи є якісь примхи, за якими мені потрібно стерегтись?
Чи доступні ресурси щодо цього коду та / або документація щодо цього?
Ще деякі речі, які я дізнався:
- Використовуйте наступне, щоб обернути заголовки на C ++, які потрібно використовувати коду C.
#ifdef __cplusplus
extern "C" {
#endif
//
// Code goes here ...
//
#ifdef __cplusplus
} // extern "C"
#endif
- Keep інтерфейси «реальний» C ++ в окремих файлах заголовків, які не включені по C. Подумайте принцип Pimpl тут. Використання
#ifndef __cplusplus #error
матеріалів допомагає виявити будь-яку божевільність. - Обережно до ідентифікаторів С ++ як імен у коді С
- Перерахування різного розміру між компіляторами C та C ++. Можливо, це не проблема, якщо ви використовуєте ланцюжок інструментів GNU, але все ж будьте обережні.
Для конструкцій дотримуйтесь наступної форми, щоб C не заплутався.
typedef struct X { ... } X
Потім використовуйте покажчики для переходу навколо об'єктів C ++, їх просто потрібно оголосити в C як структуру X, де X - об'єкт C ++.
Все це - люб’язність друга, який є майстром на C ++.