Re[4]: do { ... } while(false);
От: Andrew.W Worobow https://github.com/Worobow
Дата: 18.09.14 13:48
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Ну конкретно тут в чем плюс его использования?


Вообще по правильному ( в теории, но не на практике ) вместо такого while(1) {;;; break;} или do {}while(0); надо делать функцию в которой уже выходить на end просто по return.
Но на практике особенно там где код не оптимизируют ( ядро например ) но производительность требуется используют такой вот метод.

while (1){
   HANDLE h = open();
   if ( !h )
      break;
   while (1){
      s=write(h,"{");
      if ( !s )
         break;
      
      write(h,"abc,def,uuu");

      write(h,"}");
      break;
   }
   close(h); 
   break;
}


то есть это по уму, по идеализму надо заменять на функцию даже если она один раз вывывается, но еще не понятно что яснее — функция которая написана только для того чтобы брековаться по return вместо goto.

То есть есть такие операции которые требуют "операций скобок" — открыл -> надо закрыть, записал начало "{" надо записть и конец "}". И так делее.

В этом случае в конце кода действий возникает логика — а открыли мы или нет, и если открыли надо закрыть. И так далее.

Но если применять логику иную — типа создавать объект у которого есть свойсто "открыть" и есть констуктор и есть деструктор то тогда такая логика с проверкой а мы открыли или нет в том же деструкторе выглядит логично. Но если это просто небольшой код, и нет нужды городить обьекты и классы, ну как я уже сказал в ядре например. Где эфективность важнее красоты, а оптимизации от компилятора нет, то пишут вот так — ну не очень красиво, но по привыкнешь — нормально.


N>Понимаю если бы там макросы были, а так...
Не все кто уехал, предал Россию.
Отредактировано 18.09.2014 13:54 Andrew.W Worobow . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.