我正在開發熱升級功能,需要打包一個結構數組以便新版本找到它們。我真的想避免爲每個可能的版本轉換添加轉換函數。這是否合理?
結構最可能的變化是將來要將更多字段添加到結構中,如果發生這種情況,那麼新字段的默認值將可用。我也將很快面臨將結構數組保存到配置文件中的任務,因此可以爲可應用於熱升級和配置保存的答案提供額外的功勞。
我不擔心炎熱的更新機制我只是給它一個指針和大小和它夢幻般的神奇:)將C結構發送到未來版本的代碼?
2
A
回答
10
的結構最可能的變化是更多的領域是將來添加到結構中,如果發生這種情況,則新字段的默認值將可用。
從版本1開始,每個結構始終包含sizeof(myStruct)
作爲字段。然後,當您需要添加新字段時,請始終在每個結構的末尾執行此操作,而不要在中間。現在,當接收(或從文件中讀取數據)時,首先只讀取大小字段,以便知道它後面會有多少字節。如果接收器/閱讀器確定的尺寸小於sizeof(myStruct)
,那麼您知道缺少某些內容,並且需要缺省值。
7
我推薦使用Google的protocol buffers之類的東西,它會自動處理版本控制。如果您將新字段添加到消息中,則處理起來非常容易。
相關問題
- 1. TFS將未來代碼合併到以前的版本分支
- 2. 與舊的C代碼與新的ncurses版本(ldat結構)
- 3. 將此C#代碼重構爲更加優雅的版本
- 4. 從c發送結構到java進程
- 5. 發送結構指針到函數C
- 6. 將結構傳遞給來自C#的非託管代碼
- 7. C++ Winsock結構發送/ recv
- 8. MPI - C發送結構
- 9. 對C座發送結構
- 10. visual C++強制發佈版本使用調試版本代碼
- 11. 將PhoneGap插件的中期結果發送到JavaScript代碼
- 12. 警告(代碼1681):「密碼」已取消,將在未來的版本
- 13. 使用WM_COPYDATA將結構從C++發送到WPF
- 14. 使用objective-c中的代碼截圖併發送到文本
- 15. 如何將表單數據「發送」到C#代碼,然後讓C#「發送」數據回來?
- 16. C#代碼內未觸發Javascript代碼
- 17. 將代碼從vim發送到stata
- 18. 非託管C++代碼將字符串發送到託管代碼的問題
- 19. 定義打包版本的C結構
- 20. 構建Android項目時未識別的新版本代碼
- 21. 發送指向C#結構體的指針到C++ DLL
- 22. 將C++代碼從結構遷移到類
- 23. 發送C代碼從文本框到服務器
- 24. MS API代碼包 - 它是否支持未來版本的DirectX?
- 25. 僞代碼結構到Mysql?
- 26. 發送jenkins將結果發送到Confluence
- 27. 將youtube api代碼版本2遷移到版本3
- 28. 如何將此代碼從版本3.3恢復到版本2.7
- 29. 將類結構添加到基本Ruby代碼
- 30. C代碼與C++數據結構
我在這裏找到了一個C(非++)端口:http://code.google.com/p/protobuf-c/ – 2009-07-17 22:13:17