次のコードを検討してください。
typedef struct {
int type;
} object_t;
typedef struct {
object_t object;
int age;
} person_t;
int age(object_t *object) {
if (object->type == PERSON) {
return ((person_t *)object)->age;
} else {
return 0;
}
}
これは合法的なコードですか、それとも C99 の厳密なエイリアシング規則に違反していますか? 合法/違法の理由を教えてください。