Привет! Допустим, есть библиотека с функцией, которая возвращает объект структуры в стеке. Например

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 */
};


Однако и тут нужно думать о выравнивании, т.к. надо точно знать сколько забирает в байтах новое поле структуры...

Как есть ещё мысли как обеспечить бинарную совместимость?








 ,






URL записи