2009-07-17 26 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