2009-07-17 4 views
2

저는 최신 업그레이드 기능을 사용하기 위해 새로운 버전을 찾기 위해 구조체 배열을 숨겨야합니다. 가능한 모든 버전 전환에 대해 변환 함수를 추가하지 않으려합니다. 이게 합리적입니까?
구조체의 변경 가능성이 가장 큰 변경 사항은 미래의 구조에 더 많은 필드를 추가하는 것입니다. 그러면이 경우 새로운 필드의 기본값을 사용할 수 있습니다. 또한 곧 구조체 배열을 구성 파일에 저장하는 작업에 직면하게 될 것이므로 핫 업그레이드 및 구성 저장에 모두 적용 할 수있는 답변에 대한 추가 점수를 얻을 수 있습니다.
난 그냥 그것을 포인터와 크기를 줄 핫 업데이트 메커니즘에 대해 걱정할 필요가 없습니다 그것은 환상적인 마법 :코드의 차후 버전에 C 구조를 보냅니 까?

답변

10

구조체에 대부분 변화가 더 많은 필드가되기 위해서는입니다 않습니다 미래에 구조체에 추가되고 이것이 발생하면 새로운 필드의 기본값을 사용할 수 있습니다. 버전 1에서

는 항상 각 구조체의 시작 부분에서 필드로 sizeof(myStruct) 있습니다. 그런 다음 새 필드를 추가해야하는 경우 항상 각 구조체의 끝에서 중간 단계가되도록하십시오. 이제 파일을받을 때 (또는 파일에서 읽는 경우) 먼저 크기 필드 만 읽으십시오. 그러면 얼마나 많은 바이트가 그 다음에 오는지 알 수 있습니다. 크기가 수신기/판독기에서 결정한대로 sizeof(myStruct)보다 작 으면 무언가가 누락되었음을 알고 있으며 기본값이 필요합니다.

7

자동으로 버전 관리를 처리하는 Google의 protocol buffers과 같은 것을 사용하는 것이 좋습니다. 메시지에 새 입력란을 추가하면 처리하기가 매우 쉽습니다.

+1

여기에 C (non ++) 포트가 있습니다. http://code.google.com/p/protobuf-c/ –

관련 문제