Независимо от того, как "плохо" используется код, и считая, что выравнивание и т.д. не является проблемой для компилятора/платформы, это undefined или нарушение поведения?
Если у меня есть такая структура: -
struct data
{
int a, b, c;
};
struct data thing;
Является ли юридическим доступ к a
, b
и c
как (&thing.a)[0]
, (&thing.a)[1]
и (&thing.a)[2]
?
В каждом случае, на каждом компиляторе и платформе я пробовал его, с каждой настройкой, которую я пробовал, он "работал". Я просто обеспокоен тем, что компилятор может не понимать, что b и вещь [1] - одно и то же, а магазины в "b" могут быть помещены в регистр и предмет [1] читает неправильное значение из памяти (например). В каждом случае я попробовал, но сделал все правильно. (Я понимаю, конечно, что не очень много)
Это не мой код; это код, с которым мне нужно работать, меня интересует, является ли этот код плохим или сломанным, поскольку разные влияют на мои приоритеты для его изменения:)
С тегами C и С++. Меня больше всего интересует С++, но и C, если он отличается, просто для интереса.