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