Финт ушами для выхода из внешнего цикла
От: Caracrist https://1pwd.org/
Дата: 28.03.17 07:59
Оценка: 7 (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: Финт ушами для выхода из внешнего цикла
От: Vain Россия google.ru
Дата: 28.03.17 08:58
Оценка:
Здравствуйте, Caracrist, Вы писали:

C>#define

Баян стал гармонью.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Отредактировано 29.03.2017 13:30 Vain . Предыдущая версия . Еще …
Отредактировано 29.03.2017 13:29 Vain . Предыдущая версия .
Re: Финт ушами для выхода из внешнего цикла
От: koenjihyakkei Россия  
Дата: 28.03.17 09:44
Оценка:
Здравствуйте, Caracrist, Вы писали:

Почему в КУ?
Re[2]: Финт ушами для выхода из внешнего цикла
От: Caracrist https://1pwd.org/
Дата: 28.03.17 10:04
Оценка:
Здравствуйте, koenjihyakkei, Вы писали:

K>Здравствуйте, Caracrist, Вы писали:


K>Почему в КУ?


по ошибке. снести не получается
~~~~~
~lol~~
~~~ Single Password Solution
Re: Финт ушами для выхода из внешнего цикла
От: alexqc Россия
Дата: 28.03.17 15:17
Оценка: :)
Здравствуйте, Caracrist, Вы писали:


C>
C>// Adds name to a scope/loop and allows to break from it by name
C>// Example:
C>//    LABELED(outerLoop) for (auto it = container.begin(); it != container.end(); it++)
C>//    {
C>//        switch (*it)
C>//        {
C>//        case 1:
C>//            BREAK_FROM(outerLoop);
C>//        }
C>//    }
C>#define LABELED(scopeName)  if (false) scopeName:; else
C>#define BREAK_FROM(scopeName) goto scopeName
C>


А разве допустимо переходить внутрь блоков и if'ов?
Живи, Україно, прекрасна і сильна
Re[3]: Финт ушами для выхода из внешнего цикла
От: ShaggyOwl Россия http://www.rsdn.org
Дата: 28.03.17 16:17
Оценка: +1
Здравствуйте, Caracrist, Вы писали:

C>по ошибке. снести не получается


А куда надо?
Хорошо там, где мы есть! :)
Re[2]: Финт ушами для выхода из внешнего цикла
От: Alexander G Украина  
Дата: 28.03.17 18:55
Оценка:
Здравствуйте, alexqc, Вы писали:

A>А разве допустимо переходить внутрь блоков и if'ов?


Да хоть внутрь do...while — классика же.
Русский военный корабль идёт ко дну!
Re[3]: Финт ушами для выхода из внешнего цикла
От: alexqc Россия
Дата: 29.03.17 09:08
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, alexqc, Вы писали:


A>>А разве допустимо переходить внутрь блоков и if'ов?


AG>Да хоть внутрь do...while — классика же.


Вообще-то показанное "устройство" — несколько про другое, и там нет передачи внутрь do...while.

Но да, проверил: http://cpp.sh/6oafq — не ругнулось, выполнилось как предполагается.

Хотя для меня это странно — возможность захода в произвольную точку блока "извне" — коверкает логику работы и затрудняет чтение; а уж как можно разрешить заходить внутрь цикла, допуская пропуск его инициализации — .
Живи, Україно, прекрасна і сильна
Re[4]: Финт ушами для выхода из внешнего цикла
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.03.17 09:14
Оценка: -1
Здравствуйте, alexqc, Вы писали:


A>Хотя для меня это странно — возможность захода в произвольную точку блока "извне" — коверкает логику работы и затрудняет чтение; а уж как можно разрешить заходить внутрь цикла, допуская пропуск его инициализации — .


Поэтому goto и считается злом
Маньяк Робокряк колесит по городу
Re[4]: Финт ушами для выхода из внешнего цикла
От: Alexander G Украина  
Дата: 29.03.17 09:18
Оценка:
Здравствуйте, alexqc, Вы писали:

A>Вообще-то показанное "устройство" — несколько про другое, и там нет передачи внутрь do...while.


Есть. При входе там переход на case метку с пропуском do.

Единственное отличие — case метки вместо goto меток.

A>Хотя для меня это странно — возможность захода в произвольную точку блока "извне" — коверкает логику работы и затрудняет чтение;


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

A>а уж как можно разрешить заходить внутрь цикла, допуская пропуск его инициализации — .


Прыгнуть через объявление переменной нельзя.
Вот поэтому, например, в case метках без дополнительных блоков переменные объявлять нельзя, но в последней метке — можно.

Ну а если при объявлении переменная не инициализирована, значит, "мусорная" инициализация устраивает
Русский военный корабль идёт ко дну!
Re[5]: Финт ушами для выхода из внешнего цикла
От: alexqc Россия
Дата: 29.03.17 11:50
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, alexqc, Вы писали:


A>>Вообще-то показанное "устройство" — несколько про другое, и там нет передачи внутрь do...while.


AG>Есть. При входе там переход на case метку с пропуском do.


Действительно, case внутри do получается.


A>>а уж как можно разрешить заходить внутрь цикла, допуская пропуск его инициализации — .


AG>Прыгнуть через объявление переменной нельзя.

AG>Вот поэтому, например, в case метках без дополнительных блоков переменные объявлять нельзя, но в последней метке — можно.

AG>Ну а если при объявлении переменная не инициализирована, значит, "мусорная" инициализация устраивает


Да, проверил — goto внутрь for(int i=0...) — дает ошибку, goto внутрь for(i=0...) — предупреждение о неинициализированной переменной. Ну и разумеется, если переменная инитится где-то ранее — то не получим даже предупреждения.
Живи, Україно, прекрасна і сильна
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.