Может ли псевдоним структуры иметь свой собственный начальный и единственный член?

Например, допустим ли этот код или он вызывает неопределенное поведение, нарушая правила псевдонимов?

int x;
struct s { int i; } y;
x = 1;
y = *(struct s *)&x;
printf("%d\n", y.i);

Меня интересует использование основанной на этом методики для разработки переносимого метода для выполнения операций чтения с псевдонимом.

Обновление: вот предполагаемый вариант использования, немного отличающийся, но он должен быть действительным, если и только если вышеупомянутое допустимо:

static inline uint32_t read32(const unsigned char *p)
{
    struct a { char r[4]; };
    union b { struct a r; uint32_t x; } tmp;
    tmp.r = *(struct a *)p;
    return tmp.x;
}

GCC, по желанию, компилирует это в одну 32-битную загрузку, и, похоже, избегает проблем с наложением, которые могут произойти, еслиp на самом деле указывает на тип, отличный отchar, Другими словами, кажется, что он выступает в качестве переносной замены для GNU C__attribute__((__may_alias__)) приписывать. Но я'Я не уверен, что этодействительно четко определены

Ответы на вопрос(5)

Ваш ответ на вопрос