I have two structures in C program: SmallStructABC and BigStructXYZ
I have several members in both of them; SmallStructABC's all 10 members are exactly same as first 10 members of BigStructXYZ. BigStructXYZ has 50 additional members.
Is it OK to type-cast this two structures to each other?
SmallStructABC *i = (BigStructXYZ*)j;
BigStructXYZ *a = (SmallStructABC*)b;
I only access first 10 (common) members after type-casting..
I wrote C program and its working fine on my machine. Just wanted to verify if I need to take care of any corner cases (alignment, invalid read, non-gcc compilation etc)..
EDIT: Q: Why I want to do something like this?
A: BigStructXYZ is very big in size (say 50KB) and contains some header (keys, map etc). I compress this data before sending over network. I leave header (in our case its SmallStructABC) as it is. By doing type-cast, I can access these keys from header as and when required.
No, this is not a good idea. Much better would be to type cast pointers to the structures and manipulate them through the pointers:
void DoSomething(Small *thing) {
// ...
}
int main() {
Big big = {0};
Small small = {0};
Small *p0 = (Small*)&big;
Small *p1 = &small;
DoSomething(p0);
DoSomething(p1);
return 0;
}
An alternative and safer design is to define Big in terms of Small:
typedef struct Small {
int foo;
};
typedef struct Big {
Small small;
int y;
};
The code above won't compile. Is j already a BigStructXYZ, and did you mean to cast it to SmallStructABC?
Whatever the case, what you're trying to do is a bad idea. It would be better to have SmallStructXYZ as the first field inside BigStructXYZ and work thus:
SmallStructABC i = j.smallStruct;
BigStructXYZ a = { b };
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With