Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Мотороллер
428 / 240 / 37
Регистрация: 05.08.2013
Сообщений: 1,644
Завершенные тесты: 1
#1

Do {.} while (false) - C++

02.10.2015, 09:59. Просмотров 456. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
do
{
  //код
} while(false)
Встречал пару раз такой код, собственно для чего может потребоваться такая обертка?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2015, 09:59     Do {.} while (false)
Посмотрите здесь:

False,True C++
вывод true и false C++
C++ Значения True или False
С++. вывод true/false C++
true and false C++
C++ Зачем false?
Функция не возвращает false C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Митя800
49 / 49 / 12
Регистрация: 13.07.2015
Сообщений: 165
02.10.2015, 10:08     Do {.} while (false) #2
Мотороллер, видимо был цикл, потом необходимость отпала, взяли быстренько потерли условие на false. Или создали область видимости локальных переменных, хотя почему бы не взять просто {}.
С другой стороны без контекста сложно сказать, но я подобный код избегаю.
Rius
Эксперт .NET
2048 / 1448 / 345
Регистрация: 25.05.2015
Сообщений: 4,921
Записей в блоге: 7
Завершенные тесты: 4
02.10.2015, 10:14     Do {.} while (false) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Мотороллер, это один из вариантов обхода нежелательных оптимизаций компилятора в макросах.
А также способ прервать последовательность с помощью break;
rikimaru2013
C++ Game Dev
2376 / 1070 / 234
Регистрация: 30.11.2013
Сообщений: 3,552
02.10.2015, 12:31     Do {.} while (false) #4
И когда в макросе надо выполнить ряд действий, заключают в такую конструкцию
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.10.2015, 14:16     Do {.} while (false) #5
Цитата Сообщение от Rius Посмотреть сообщение
один из вариантов обхода нежелательных оптимизаций компилятора в макросах
Не оптимизаций, а ошибочного использования в коде. Подробнее тут.
PavelPol
21 / 21 / 10
Регистрация: 05.11.2014
Сообщений: 98
02.10.2015, 14:46     Do {.} while (false) #6
Возможен такой вариант (иногда очень кстати)
C++
1
2
3
4
5
6
7
8
9
do
{
   A = // вычисление A
   switch(A) {
       case 0: break;
       case 1: A++; break;
       case 3: continue; // повтор цикла
   }
} while(false)
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.10.2015, 15:15     Do {.} while (false) #7
Цитата Сообщение от PavelPol Посмотреть сообщение
Возможен такой вариант (иногда очень кстати)
continue в данном случае переносит в точку перед while(false) (а не после do), т.е. нельзя через continue "удлинить" цикл, если условие продолжения цикла false;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2015, 15:21     Do {.} while (false)
Еще ссылки по теме:

C++ Перегрузка констант true и false
C++ Задача на true or false
Собственная функция true, false C++
C++ Контейнерный класс True False
BASS_Init возвращает FALSE C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17382 / 5620 / 350
Регистрация: 30.03.2009
Сообщений: 15,398
Записей в блоге: 26
02.10.2015, 15:21     Do {.} while (false) #8
Цитата Сообщение от Мотороллер Посмотреть сообщение
Встречал пару раз такой код, собственно для чего может потребоваться такая обертка?
С вероятностью 99% ты видел это внутри макроса. Зачем это делается - см. http://www.cyberforum.ru/blogs/18334/blog104.html раздел 2.5

Добавлено через 43 секунды
Цитата Сообщение от Rius Посмотреть сообщение
это один из вариантов обхода нежелательных оптимизаций компилятора в макросах
Не бывает такого
Yandex
Объявления
02.10.2015, 15:21     Do {.} while (false)
Ответ Создать тему
Опции темы

Текущее время: 08:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru