LINUX.ORG.RU

История изменений

Исправление 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 есть тип с самым «длинным» хранилищем.