我正在开发热升级功能,需要打包一个结构数组以便新版本找到它们。我真的想避免为每个可能的版本转换添加转换函数。这是否合理?
结构最可能的变化是将来要将更多字段添加到结构中,如果发生这种情况,那么新字段的默认值将可用。我也将很快面临将结构数组保存到配置文件中的任务,因此可以为可应用于热升级和配置保存的答案提供额外的功劳。
我不担心炎热的更新机制我只是给它一个指针和大小和它梦幻般的神奇:)将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