2009-07-17 47 views
2

我正在開發熱升級功能,需要打包一個結構數組以便新版本找到它們。我真的想避免爲每個可能的版本轉換添加轉換函數。這是否合理?
結構最可能的變化是將來要將更多字段添加到結構中,如果發生這種情況,那麼新字段的默認值將可用。我也將很快面臨將結構數組保存到配置文件中的任務,因此可以爲可應用於熱升級和配置保存的答案提供額外的功勞。
我不擔心炎熱的更新機制我只是給它一個指針和大小和它夢幻般的神奇:)將C結構發送到未來版本的代碼?

回答

10

的結構最可能的變化是更多的領域是將來添加到結構中,如果發生這種情況,則新字段的默認值將可用。

從版本1開始,每個結構始終包含sizeof(myStruct)作爲字段。然後,當您需要添加新字段時,請始終在每個結構的末尾執行此操作,而不要在中間。現在,當接收(或從文件中讀取數據)時,首先只讀取大小字段,以便知道它後面會有多少字節。如果接收器/閱讀器確定的尺寸小於sizeof(myStruct),那麼您知道缺少某些內容,並且需要缺省值。

7

我推薦使用Google的protocol buffers之類的東西,它會自動處理版本控制。如果您將新字段添加到消息中,則處理起來非常容易。

+1

我在這裏找到了一個C(非++)端口:http://code.google.com/p/protobuf-c/ – 2009-07-17 22:13:17