comp.lang.c
[Top] [All Lists]

Re: struct versioning

Subject: Re: struct versioning
From: ""
Date: Tue, 29 Apr 2008 19:24:19 -0700 PDT
Newsgroups: comp.lang.c

On Apr 30, 12:24 am, "Pres" <invalid.em...@xxxxxxxx> wrote:
> Noticed that several windows API's take a size parameter.
> i.e. one of the members of the struct is dwSize which is supposed
> to be initialized by client code, by taking the sizeof of the struct.
>
> I assume this is to enable versioning of structures
>
> /* first version of struct */
> typedef struct { int dwSize; type1 t1; } A;
>
> /* 2nd version of struct in new version of the library */
>
> typedef struct { int dwSize; type1 t1; } A_v1; // Old struct renamed to
> A_v1
> typedef struct { int dwSize; type1 t1; type 2;} A;
>
> So their implementation of function will look like
> // Impl in v1 of Lib
> void fn(A * ptr) { /* Implementation */ }
>
> //Impl in v2 of lib
>
> void fn_v1(A_v1 * ptr) { /* Renamed old fn to fn_v1 - Implementation */
>
> void fn(A * ptr)
> {
>     if (ptr->dwSize == sizeof(A_v1)
>     {
>         fn_v1(); return;
>     }
>     /* New Implementation Below */
>
> }
>
> Is my assumption correct - is this something like what they would
> be doing?
>
> Is this fully standard compliant or are they taking liberties with their
> close knowledge of the internals of the compiler.
> Assume lib_v1 is compiled with compiler cl_v1 & lib_v2 is compiled
> with compiler cl_v2, then it is safe to assume that sizeof(A_v1) would
> be the same when compiled with different versions of the same compiler?
>
> i.e. can sizeof(A_v1) can when compiled with gcc v2 as compared to
> gcc v1?
> If it cannot, then can it change when compiled by two totally different
> compilers?
>
> Any other gotchas?
are you sure sizeof(A_v1) !=....... != sizeof(A_vn)?
why not defines a version field?

<Prev in Thread] Current Thread [Next in Thread>
Privacy Policy