Привет! Допустим, есть библиотека с функцией, которая возвращает объект структуры в стеке. Например
struct Data
{
int size;
void *data;
};
struct Data getData();
В новой версии библиотеки я хочу расширить структуру Data, но сохранив бинарную совместимость. На ум приходит только добавление пустого массива фиксированной длины в изначальную структуру, забирая оттуда элементы по мере добавления новых полей в структуру:
/* VER 1 */
struct Data
{
int32_t size;
void *data;
char reserved[32];
};
/* VER 2 */
struct Data
{
int32_t size;
void *data;
int32_t new_data;
char reserved[28]; /* -4 */
};
Однако и тут нужно думать о выравнивании, т.к. надо точно знать сколько забирает в байтах новое поле структуры...
Как есть ещё мысли как обеспечить бинарную совместимость?