Законно ли выходить за пределы одного элемента структуры для просмотра другого?

Учитывая следующий надуманный пример кода:

struct abc
{
    int x[5];
    int y[5];
};

void main()
{
    struct abc test;
    test.y[0] = 10;
    printf("%n", test.x[5]);
}

Вывод программы - 10.

Хотя это и не лучшая практика программирования, но это работает. Однако является ли это артефактом компилятора и платформы или это законный код? (т.е. определено стандартом C?)

Даже если результат не гарантированно равен 10, существует ли когда-нибудь случай, когда это было бы «незаконным» (т.е. запись в память, которой я не «владею»)?

8
задан David Pfeffer 13 December 2011 в 14:45
поделиться