|
구조체의 크기가 꼭 정해진 상태라면
결국 내부 데이터 값을 가지고 판단해야 겠죠.
Reserved 에 있는 값이 그전에 어떻게 초기화를 했는지 모르지만
가령 그전에 사용하는게 zero 화 시켜셔 사용했다면
reserved 에 하나의 byte 를 할당해서 struct data의 version 정도로 쓰면
될듯 하군요.
즉 reserved 가 88 개 남았으니까 이중 하나를
char dataversion; 이라고해서
그전 데이터는 0으로 초기화가 되어 있었다면
이제부터는 1 로 쓰면 될듯 하군요.
그러면 해당 구조체를 받는 쪽에서
그 위치를 보고 month, date,week 등이 적용되야 되는지를 판단하는거죠.
이거보다 좀 심한 방법으로는
어짜피 hour 가 int 형이고 (시간을 나타내실려고 하는건지 아니면 경과 시간을 나타내실려고 하는건지
잘 모르겠군요, 경과 시간을 나타내실려고 했다면 24 시간보다 큰 수치도 들어 있을테니까요)
어쩃든 평볌한 시간이면 24 시간보다 큰수는 없을거고요.
더더욱 없는것은 - 시간 이겠죠. 마이너스 시간으로 플래그를 해두시는 방법도 있을듯 합니다.
전 앞의 방법을 추천 드리고 싶군요.
감사 합니다.
초보자 님이 쓰신 글 :
: 라이브러리 함수의 인자로 구조체를 넘겨주는데..
:
: 이 구조체에 새로운 파라미터를 추가하고자 합니다...
:
: 새로운 파라미터가 구조체에 추가될 일이 생길 경우를 대비하여 구조체를 다음과 같이 정의하였습니다..
:
: 예를 들면
: type struct{
: int hour;
: int minute;
: int second;
: char Reserved[100]; // 100 byte 여분.
: } Time;
:
: void SetTime(Time *ptime); /// 라이브러리 함수
:
: 이렇게 정의되어 있는 구조체를 사용하다가 여기에 새로운 변수를 추가하려고 할 때 어떻게 해야될지 좋은 방법 없을까요? 예를 들면 month, date, week를 추가한다면..
:
: type struct{
: int hour;
: int minute;
: int second;
: int month;
: int date;
: int week;
: char Reserved[88]; // 88byte 여분.
: } Time;
:
: 일반 application 프로그램을 짜면 구조체에 파라미터를 그냥 추가하면 되지만
: 라이브러리 프로그램을 개발하고 있는데...이 파라미터 값들은 다른 곳에서 네트워크를 통해서 라이브러리가 데이터를 받아옵니다.. 이 추가된 파라미터 값들은 항상 값을 읽어올 수 있는 것이 아니라 어디서 값을 읽어오느냐 따라서 값이 존재할 수도 있고 없을 수도 있습니다..
: 이 점(값이 존재하는지 아닌지)은 라이브러리는 알 수 있지만 위와 같은 형태로 한다면 application에서는 그 값이 쓰레기 값인지 아니면 실제 값인지 알수가 없습니다.. 이런 호환성을 생각해서 구조체을 만들 수 있는 방법이 없을까요?
:
: 좋은 방법 있으면 부탁드립니다..
|