В этом проекте мне нужно получить размер структуры в заголовочном файле из файла C.
Я не могу включить файл заголовка в файл C, потому что структура содержит классы, которые не будут компилироваться в C.
Есть идеи?
Вы могли бы заявить в .h
файл:
extern const size_t SIZE_OF_MY_STRUCT;
И определить SIZE_OF_MY_STRUCT
в .cpp
файл как:
extern const size_t SIZE_OF_MY_STRUCT = sizeof(MyStruct);
Таким образом, у вас не будет накладных расходов на вызов функции.
Предоставьте служебную функцию в вашем C ++:
extern "C" size_t ReturnSizeOfMyStruct(void) {
return sizeof(MyStruct);
}
Затем вызовите его в своем коде C:
extern size_t ReturnSizeOfMyStruct(void);
size_t howBig = ReturnSizeOfMyStruct();
Если struct
на самом деле использует функции C ++ (функции-члены, private
/protected
/public
члены, конструктор и / или деструктор наследуются от другого класса / структуры) [или, в свою очередь, имеют члены, использующие любую из этих функций], тогда у вас не так много вариантов:
extern "C"
Соглашение о вызовах. Могут быть и другие варианты вышеупомянутых тем, но по сути, если предположить, что это «структура C ++», которая не может быть скомпилирована в C, вы застряли с тем, чтобы исправить это каким-то образом, дружественным для C ++.
Очевидно, что если структура C ++ не использует какие-либо функции C ++ — это просто старые данные, то решение, очевидно, состоит в том, чтобы переместить структуру из текущего заголовка и поместить ее в заголовок, который может быть включен как в C, так и в C ++. ,