Смешанный исходный код C / C ++: получить sizeof (структуру C ++) в коде C

В этом проекте мне нужно получить размер структуры в заголовочном файле из файла C.

Я не могу включить файл заголовка в файл C, потому что структура содержит классы, которые не будут компилироваться в C.

Есть идеи?

2

Решение

Вы могли бы заявить в .h файл:

extern const size_t SIZE_OF_MY_STRUCT;

И определить SIZE_OF_MY_STRUCT в .cpp файл как:

extern const size_t SIZE_OF_MY_STRUCT = sizeof(MyStruct);

Таким образом, у вас не будет накладных расходов на вызов функции.

5

Другие решения

Предоставьте служебную функцию в вашем C ++:

extern "C" size_t ReturnSizeOfMyStruct(void) {
return sizeof(MyStruct);
}

Затем вызовите его в своем коде C:

extern size_t ReturnSizeOfMyStruct(void);
size_t howBig = ReturnSizeOfMyStruct();
5

Если struct на самом деле использует функции C ++ (функции-члены, private/protected/public члены, конструктор и / или деструктор наследуются от другого класса / структуры) [или, в свою очередь, имеют члены, использующие любую из этих функций], тогда у вас не так много вариантов:

  1. Напишите функцию, которая возвращает размер, который компилируется как C ++, но с extern "C" Соглашение о вызовах.
  2. Реорганизуйте ваш код так, чтобы вам не нужно было использовать sizeof (структуру C ++) в вашем C-коде каким-либо другим способом.
  3. Измените код на C так, чтобы он был совместим с C ++, и скомпилируйте его с помощью компилятора C ++.

Могут быть и другие варианты вышеупомянутых тем, но по сути, если предположить, что это «структура C ++», которая не может быть скомпилирована в C, вы застряли с тем, чтобы исправить это каким-то образом, дружественным для C ++.

Очевидно, что если структура C ++ не использует какие-либо функции C ++ — это просто старые данные, то решение, очевидно, состоит в том, чтобы переместить структуру из текущего заголовка и поместить ее в заголовок, который может быть включен как в C, так и в C ++. ,

1
По вопросам рекламы [email protected]