Недавно я встретил код коллеги, который выглядел так:
typedef struct A {
int x;
}A;
typedef struct B {
A a;
int d;
}B;
void fn(){
B *b;
((A*)b)->x = 10;
}
Его объяснение состояло в том, что поскольку struct A
был первым членом struct B
, поэтому b->x
будет таким же, как b->a.x
, и обеспечивает лучшую читаемость.
Это имеет смысл, но считается ли это хорошей практикой? И будет ли это работать на разных платформах? В настоящее время это отлично работает на GCC.