Вниз  C / C++
- 23.10.2015 / 04:00
Jahak
  Пользователь

Jahak 
Сейчас: Offline
Кто-нибудь может мне объяснить, зачем тут используется цикл
do{
#code..
}while(false)
  ведь он выполнится лишь один раз или я чего-то незнаю?:)

Изменено Jahak (23.10 / 04:02) (всего 1 раз)
- 23.10.2015 / 07:33
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
Jahak, чтобы очистить совесть и не использовать goto. В любой моменты мы можем выйти из этого «цикла» с помощью break.
Пример:
  1. // инициализация ресурсов
  2. do {
  3.   // операции
  4.   ...
  5.   {
  6.     // возможно появление ошибки
  7.     // откат изменений  
  8.     break;
  9.   }
  10.   ...
  11.   // операции
  12. } while (false)
  13. // освобождение ресурсов

__________________
 don't tread on me
- 23.10.2015 / 14:00
Jahak
  Пользователь

Jahak 
Сейчас: Offline
aRiGaTo, Я знаю что такое goto и break, но вопрос не в этом. Я спросил зачем они используют цикл когда можно и без него, ведь разницы в данном случае никакой, что с циклом, что без цикла, результат один и тот же :gg:
- 23.10.2015 / 14:11
Dimon638
  Пользователь

Dimon638 
Сейчас: Offline
Jahak, Цитата aRiGaTo:
Jahak, чтобы очистить совесть и не использовать goto.
:gy:
- 23.10.2015 / 14:54
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
Jahak, говорю же, чтобы можно было прервать последовательность операций в любом её месте. По-нормальному это выглядит так:
  1. defun foo() {
  2.   // Инициализация
  3.   bar();
  4.   // Освобождение ресурсов
  5. }
  6.  
  7. proc bar() {
  8.   // Код
  9.   if (caseA) return;
  10.   // Код
  11.   if (caseB) return;
  12.   // Код
  13. }
А do { ... } while (false) использует вообще непонятно кто :пони: Видимо жадные до стека вызовов.
__________________
 don't tread on me
- 23.10.2015 / 15:02
Freddy
  Пользователь

Freddy 
Сейчас: Offline
Цитата Jahak:
Кто-нибудь может мне объяснить, зачем тут используется цикл do{ #code.. }while(false) ведь он выполнится лишь один раз или я чего-то
Это трюк того, чтобы при раскрытии макроса получился компилируемый код, когда после вызова макроса стоит точка с запятой в конце. Здесь подробнее можно посмотреть, подраздел "Multi-Statement Macros": https://mikeash.com/pyblog/fri...tips-and-tricks.html
- 23.10.2015 / 15:03
Naik
  Пользователь

Naik 
Сейчас: Offline
aRiGaTo, я там не нашел ни break, ни continue, может в макросах где-то есть :gg: Примерно так хотел сделать goto в трансляторе MB -> Java

Изменено Naik (23.10 / 15:05) (всего 2 раза)
- 23.10.2015 / 15:10
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
__________________
 don't tread on me
- 30.10.2015 / 17:35
Jahak
  Пользователь

Jahak 
Сейчас: Offline
:preved: Выкладываю небольшую стопку книжек по C++ для всех, которую я все еще читаю :кек2:
- 30.10.2015 / 18:00
HeWeD
  Пользователь

HeWeD 
Сейчас: Offline
Я школьник. Мне 11 лет, скажите, как выучить ц++? Желательно побыстрее и ничего не делая. Просто, я хочу зделать гта 5 на калькуляторы, а то у меня комп ни тянет. Вот хочется переделать и заработать много денег.
Бан от Ксакеп:
Причина: обратиться к сенсею и перестать флудить.
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)