У меня есть библиотека 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 ++.