В примере работы с библиотекой PolarSSL есть такой брейканутый цикл:
Код:
    do
    {
        len = sizeof( buf ) - 1;
        memset( buf, 0, sizeof( buf ) );
        ret = ssl_read( &ssl, buf, len );
        if( ret == POLARSSL_ERR_NET_WANT_READ || ret == POLARSSL_ERR_NET_WANT_WRITE )
            continue;
        if( ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY )
            break;
        if( ret < 0 )
        {
            printf( "failed\n  ! ssl_read returned %d\n\n", ret );
            break;
        }
        if( ret == 0 )
        {
            printf( "\n\nEOF\n\n" );
            break;
        }
        len = ret;
        printf( " %d bytes read\n\n%s", len, (char *) buf );
    }
    while( 1 );
Переводится в ЦД (действия по EOF и по ошибке, разумеется, выносятся из цикла, как не входящие в циклическую последовательность):
Код:
         res1 := Ssl.read(c.ssl, buf, bufLen-1);
         LOOP IF res1 > 0 THEN 
            C.buf2str(buf, req, res1);
            req[res1] := 0X;
            Log.Int(res1); Log.String(" bytes read:"); Log.Ln;
            Log.String(req$); Log.Ln;
            res1 := Ssl.read(c.ssl, buf, bufLen-1)
         ELSIF (res1 = Net.ERR_WANT_READ) OR (res1 = Net.ERR_WANT_WRITE) THEN
            res1 := Ssl.read(c.ssl, buf, bufLen-1)
         ELSE EXIT
         END END;
         IF res1 = 0 THEN
            Log.String("EOF"); Log.Ln   
         ELSE
            Log.String("Error: "); Log.Int(res1)
         END
Для сравнения - запись через REPEAT:
Код:
         REPEAT
            res1 := Ssl.read(c.ssl, buf, bufLen-1);
            IF res1 > 0 THEN
               C.buf2str(buf, req, res1);
               req[res1] := 0X;
               Log.Int(res1); Log.String(" bytes read:"); Log.Ln;
               Log.String(req$); Log.Ln
            END
         UNTIL (res1 <= 0) & (res1 # Net.ERR_WANT_READ) & (res1 # Net.ERR_WANT_WRITE);
         IF res1 = 0 THEN
              Log.String("EOF"); Log.Ln   
         ELSE
              Log.String("Error: "); Log.Int(res1)
         END
Видим, что классы ситуаций "замаскированы" в монолитной охране выхода и условии IF внутри.
ЦД выигрывает.