Нарушение принципов структурного кода


Исходный код

do {
XLoop: 
    XNextEvent(dpy,&event);
    switch(event.type) {
      case ResizeRequest:
        if (event.xresizerequest.window!=win_main)
          goto XLoop;
resize_main:
        xswa.event_mask&= ~ResizeRedirectMask;
        XChangeWindowAttributes(dpy,win_main,CWEventMask, &xswa);
        XSync(dpy,0); /* very important, otherwise we loop endlessly ! */
        XResizeWindow(dpy, win_main,event.xresizerequest.width,event.xresizerequest.height);
        XSync(dpy,0); /* very important, otherwise we loop endlessly ! */
        xswa.event_mask|= ResizeRedirectMask;
        XChangeWindowAttributes(dpy,win_main,CWEventMask, &xswa);
        resize=1;
        XSync(dpy,0); /* another one, just in case... */
        goto redisplay;

      case Expose:
	if (event.xexpose.count|moving_button1|vmoving_button)
	  goto XLoop;

Что не так в исходном коде

С помощью меток и операторов перехода этот код самым бессердечным образом нарушает принципы структурного программирования.

Структурное программирование старо, как говно мамонта, даже я изучал его на первом курсе университета, а современные программисты должны просто его впитывать с материнским молоком.

Предполагаю, что код был написан программистом времён какого-нибудь фортрана, так как программисты часто притаскивают в новые продвинутые языки программирования какие-нибудь привычные им устаревшие подходы.

Переписывать этот код я не буду, просто запомни: использовать оператор goto в любом языке программирования в любой ситуации — страшный грех.