Финт ушами для выхода из внешнего цикла
От: Caracrist https://1pwd.org/
Дата: 28.03.17 07:59
Оценка: 11 (4) :))) :)
// Adds name to a scope/loop and allows to break from it by name
// Example:
//    LABELED(outerLoop) for (auto it = container.begin(); it != container.end(); it++)
//    {
//        switch (*it)
//        {
//        case 1:
//            BREAK_FROM(outerLoop);
//        }
//    }
#define LABELED(scopeName)  if (false) scopeName:; else
#define BREAK_FROM(scopeName) goto scopeName
~~~~~
~lol~~
~~~ Single Password Solution
Re: Финт ушами для выхода из внешнего цикла
От: Erop Россия  
Дата: 28.03.17 08:41
Оценка: +8
Здравствуйте, Caracrist, Вы писали:


C>
C>#define LABELED(scopeName)  if (false) scopeName:; else
C>#define BREAK_FROM(scopeName) goto scopeName
C>


IMHO
for (auto it = container.begin(); it != container.end(); it++)
{
        switch (*it)
        {
        case 1:
            goto afterMainIteration;
        }
} 
afterMainIteration:;

Намного понятнее и прямее

Всё равно корректность этого твоего BREAK_FROM никак не проверяется...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Отредактировано 28.03.2017 8:42 Erop . Предыдущая версия .
Re[2]: Финт ушами для выхода из внешнего цикла
От: Alexander G Украина  
Дата: 28.03.17 09:27
Оценка: +1
Здравствуйте, Erop, Вы писали:

E>Всё равно корректность этого твоего BREAK_FROM никак не проверяется...


Может быть поелзно для буквального портирования Java-вских Labeled break.
Русский военный корабль идёт ко дну!
Re[2]: Финт ушами для выхода из внешнего цикла
От: Ops Россия  
Дата: 28.03.17 11:09
Оценка: +1 :))
Здравствуйте, Erop, Вы писали:

E>Намного понятнее и прямее


E>Всё равно корректность этого твоего BREAK_FROM никак не проверяется...


Зато gotoфобов успокаивает. Весна.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Финт ушами для выхода из внешнего цикла
От: AlexGin Беларусь  
Дата: 28.03.17 12:48
Оценка: :)
Здравствуйте, Caracrist, Вы писали:

// Adds name to a scope/loop and allows to break from it by name
// Example:
        for (auto it = container.begin(); it != container.end(); it++)
        {
            if (*it == 1)
        break;
    }


Всё просто как карандаш в стакане!
Отредактировано 28.03.2017 12:49 AlexGin . Предыдущая версия .
Re[2]: Финт ушами для выхода из внешнего цикла
От: Дрободан Фрилич СССР  
Дата: 28.03.17 14:32
Оценка: :)
AlexGin:

AG>Всё просто как карандаш в стакане!

AG>
Кхм. "Карандаш в стакане" обычно говорят про это, кхм...
взаимоотношения с очень опытными женщинами. При чем тут сишный код?
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Re: Финт ушами для выхода из внешнего цикла
От: jazzer Россия Skype: enerjazzer
Дата: 28.03.17 15:43
Оценка:
Здравствуйте, Caracrist, Вы писали:

Ага. А потом кто-нть напишет
 LABELED(outerLoop2) for (auto it = container.begin(); it != container.end(); it++)
 {
    ...
    BREAK_FROM(outerLoop1);
 }

и опаньки.

Пока нельзя сделать метки, локальные для данной области видимости, все это замена одних граблей другими.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Финт ушами для выхода из внешнего цикла
От: uzhas Ниоткуда  
Дата: 28.03.17 17:25
Оценка:
Здравствуйте, Дрободан Фрилич, Вы писали:

ДФ>При чем тут сишный код?


он тут как раз очень кстати
Re[4]: Финт ушами для выхода из внешнего цикла
От: Дрободан Фрилич СССР  
Дата: 28.03.17 18:07
Оценка: :)
uzhas:

ДФ>>При чем тут сишный код?

U>он тут как раз очень кстати
Я не понял каламбур про карандаш
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Re[2]: Финт ушами для выхода из внешнего цикла
От: Дрободан Фрилич СССР  
Дата: 28.03.17 18:14
Оценка:
AlexGin:

AG>
AG>// Adds name to a scope/loop and allows to break from it by name
AG>// Example:
AG>        for (auto it = container.begin(); it != container.end(); it++)
AG>        {
AG>            if (*it == 1)
AG>        break;
AG>    }
AG>


Топикстартер продемонстрировал java-style goto.
Там меткой обзывается конкретный оператор (простой или составной), а переход осуществляется как break метка.
Таким образом можно выйти из нескольких циклов (или вообще составных операторов).
Особенно полезно при портировании java-кода на C.
Собственно, об этом уже писали в теме.
Модератор-националист Kerk преследует оппонентов по политическим мотивам.
Re[2]: Финт ушами для выхода из внешнего цикла
От: Alexander G Украина  
Дата: 29.03.17 12:02
Оценка:
Здравствуйте, jazzer, Вы писали:


J>Пока нельзя сделать метки, локальные для данной области видимости, все это замена одних граблей другими.


Часть проблем можно заткнуть фиктивной переменной:

#define LABELED(scopeName)  if (bool scope = false) scopeName:; else
#define BREAK_FROM(scopeName) goto scopeName
Русский военный корабль идёт ко дну!
Re[3]: Финт ушами для выхода из внешнего цикла checked
От: Alexander G Украина  
Дата: 29.03.17 12:12
Оценка:
А так, наверное, можно заткнуть все возможные проблемы:

#define LABELED(scopeName)  if (bool scope##scopeName = false) scopeName:; else
#define BREAK_FROM(scopeName)  if (scope##scopeName); else goto scopeName
Русский военный корабль идёт ко дну!
Re[3]: Финт ушами для выхода из внешнего цикла
От: AlexGin Беларусь  
Дата: 29.03.17 13:14
Оценка:
Здравствуйте, Дрободан Фрилич, Вы писали:

ДФ>Топикстартер продемонстрировал java-style goto.

ДФ>Там меткой обзывается конкретный оператор (простой или составной), а переход осуществляется как break метка.
ДФ>Таким образом можно выйти из нескольких циклов (или вообще составных операторов).
ДФ>Особенно полезно при портировании java-кода на C.
ДФ>Собственно, об этом уже писали в теме.

Спасибо, понятненько
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.