отправлять структуры C в будущую версию вашего кода? - PullRequest
2 голосов
/ 17 июля 2009

Я работаю над функцией горячего обновления, и мне нужно упаковать массив структур, которые будут спрятаны, чтобы новая версия могла их найти. Я действительно хочу избежать добавления функции преобразования для каждого возможного перехода версии. Это разумно?
Наиболее вероятным изменением структуры является добавление в структуру большего количества полей в будущем, и если это произойдет, будет доступно значение по умолчанию для нового поля. Я также скоро столкнусь с задачей сохранения массива структур в файле конфигурации, так что дополнительные кредиты за ответы могут быть применены как к горячему обновлению, так и к сохранению конфигурации.
Мне не нужно беспокоиться о механизме горячего обновления, я просто указываю ему указатель и размер, и он делает фантастическую магию:)

Ответы [ 2 ]

10 голосов
/ 17 июля 2009

Наиболее вероятным изменением структуры является добавление в структуру большего количества полей в будущем, и если это произойдет, будет доступно значение по умолчанию для нового поля.

Начиная с версии 1, всегда включайте sizeof(myStruct) в качестве поля в начале каждой структуры. Затем, когда вам нужно добавить новые поля, всегда делайте это в конце каждой структуры, а не в середине. Теперь при получении (или чтении из файла) сначала прочитайте только поле размера, чтобы вы знали, сколько байтов будет после него. Если размер меньше sizeof(myStruct), как определено приемником / считывателем, то вы знаете, что чего-то не хватает, и требуются значения по умолчанию.

7 голосов
/ 17 июля 2009

Я бы рекомендовал использовать что-то вроде буфера протокола Google , который автоматически обрабатывает версии. Если вы добавляете новые поля в свои сообщения, это очень легко обрабатывать.

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