История изменений
Исправление shkolnick-kun, (текущая версия) :
Какбы намекает нам на то, что технически невозможно реализовать стандарт так, чтобы если первые N членов двух структур попарно имеют совместимые типы, то было бы UB при доступе к этим первым N членам в случае нарушения стрикт алиассинга.
При условии, что в этих первых N есть тип с самым «длинным» хранилищем.
понятно, что если у нас
typedef struct {uint8_t a; uint16_t b;} x;
//и
typedef struct {uint8_t a; uint64_t b;} y;
То результат доступа к a может быть немного неожиданным…
Исправление shkolnick-kun, :
Какбы намекает нам на то, что технически невозможно реализовать стандарт так, чтобы если первые N членов двух структур попарно имеют совместимые типы, то было бы UB при доступе к этим первым N членам в случае нарушения стрикт алиассинга.
При условии, что в этих первых N есть тип с самым «длинным» хранилищем.
понятно, что если у нас
typedef struct {uint8_t a, uint16_t b} x;
//и
typedef struct {uint8_t a, uint64_t b} y;
То результат доступа к a может быть немного неожиданным…
Исходная версия shkolnick-kun, :
Какбы намекает нам на то, что технически невозможно реализовать стандарт так, чтобы если первые N членов двух структур попарно имеют совместимые типы, то было бы UB при доступе к этим первым N членам в случае нарушения стрикт алиассинга.
При условии, что в этих первых N есть тип с самым «длинным» хранилищем.