将C结构发送到您的代码的未来版本?

时间:2009-07-17 18:22:49

标签: c

我正在开发一个热升级功能,需要打包一个结构数组,以便为​​新版本找到它们。我真的想避免为每个可能的版本转换添加转换函数。这合理吗?
  对结构的最可能的更改是将来要将更多字段添加到结构中,如果发生这种情况,则可以使用新字段的默认值。我还将很快面临将结构数组保存到配置文件中的任务,因此可以应用于热升级和配置保存的答案的额外功劳。
  我不必担心热更新机制我只是给它一个指针和一个大小,它做了神奇的魔术:)

2 个答案:

答案 0 :(得分:10)

  

对结构的最可能的更改是将来要将更多字段添加到结构中,如果发生这种情况,则可以使用新字段的默认值。

从版本1开始,始终在每个结构的开头包含sizeof(myStruct)作为字段。然后,当您需要添加新字段时,始终在每个结构的末尾执行此操作,而不是在中间。现在,当接收(或从文件读取)时,首先只读取size字段,以便知道它之后会有多少字节。如果接收器/阅读器确定的大小小于sizeof(myStruct),那么您就知道缺少某些内容,并且需要默认值。

答案 1 :(得分:7)

我建议使用类似Google的protocol buffers,它会自动处理版本控制。如果您在邮件中添加新字段,则很容易处理。