| 
 
 
 
 Легенда:
  новое сообщение 
  закрытая нитка 
  новое сообщение 
  в закрытой нитке 
  старое сообщение   | 
Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
Новичкам также крайне полезно ознакомиться с данным документом.
|  | [C++] Чел любит goto  19.09.09 15:35  Число просмотров: 3380 Автор: ryo-oh-ki Статус: Незарегистрированный пользователь
 Отредактировано 19.09.09 15:36  Количество правок: 1
 |  
| Чел любит goto, но ему запретили их использовать, потому он изнасиловал switch. :-)))) Табу на goto касается именно читабельности программ, вышеприведённый код действительно сложно читать. Единственно приемлимым случаем его (goto) использования можно считать "сбор" всех путей выполнения в одну точку в пределах функции, например, переход на обработчик ошибок в её хвосте. |  | <programming> |  
| [C++, слегка весело] Увидел сегодня в коде  25.08.09 23:02 Автор: Heller <Heller> Статус: Elderman
 |  
| В коде одного сотрудника углядел сегодня такую конструкцию (опечатки нет): 
 
 
switch (n) {
    case 1:
        if (x)
            doFirst();
        else
    case 2:
        if (y)
            doSecond();
        else
            doThird();
        break;
}
---
 
 Я лично о возможности такой конструкции не знал, остальные сотрудники тоже. Оригинальный switch содержал десяток кейсов в таком стиле.
 |  
|  | [C++] Чел любит goto  19.09.09 15:35 Автор: ryo-oh-ki Статус: Незарегистрированный пользователь
 Отредактировано 19.09.09 15:36  Количество правок: 1
 |  
| Чел любит goto, но ему запретили их использовать, потому он изнасиловал switch. :-)))) Табу на goto касается именно читабельности программ, вышеприведённый код действительно сложно читать. Единственно приемлимым случаем его (goto) использования можно считать "сбор" всех путей выполнения в одну точку в пределах функции, например, переход на обработчик ошибок в её хвосте. |  
|  | Проект закрыть. Девелопера отправить учиться.  05.09.09 05:06 Автор: void <Grebnev Valery> Статус: Elderman
 |  
|  |  
|  | Я когда писал что то типа компилятора си натыкался на кучу подобных нюансов  26.08.09 01:30 Автор: amirul <Serge> Статус: The Elderman
 |  
| > Я лично о возможности такой конструкции не знал, остальные > сотрудники тоже. Оригинальный switch содержал десяток
 > кейсов в таком стиле.
 
 switch это фактически просто goto, а case - метка для этого goto. Можно вставлять в циклы, уловия и пр.. Все тело switch-а линейно (поэтому надо делать break-и, если не хочешь провалиться в следующий case).
 
 Вот только сотрудника надо бы лишить премии за такое. Нельзя было сделать if (x) {doFirst(); break;} с "проваливанием" в case 2 по !x ?
 
 Такими "оптимизациями" обычно любят заниматься недавние школьники.
 |  
|  |  | Ну это все на самом деле происходило при обработке нажатия...  26.08.09 02:00 Автор: Heller <Heller> Статус: Elderman
 |  
| > Вот только сотрудника надо бы лишить премии за такое. > Нельзя было сделать if (x) {doFirst(); break;} с
 > "проваливанием" в case 2 по !x ?
 Ну это все на самом деле происходило при обработке нажатия кнопок в диалоге.
 
 >
 > Такими "оптимизациями" обычно любят заниматься недавние
 > школьники.
 
 Тот же самый парень, что и здесь: http://bugtraq.ru/forum/full/2008/humor/152034.html в последнем абзаце. Ему сорок и он уже полтора месяца как уволен :-\
 |  
|  | у Страуструпа есть пример похожей техники  25.08.09 23:13 Автор: dl <Dmitry Leonov>
 Отредактировано 25.08.09 23:21  Количество правок: 3
 |  
| ...в упражнениях к главе про выражения: 
 
int n=(count+7)/8;
switch(count%8){
case 0: do{ *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
}while( --n >0);
}
---
 Хотя это практически классика (http://en.wikipedia.org/wiki/Duff%27s_device), дающая какой-то выигрыш в скорости, в других случаях за такой код надо убивать мучительной смертью.
 |  
|  |  | Прикольно, а почему кусок программного кода назвали "устройством", "device"? ;)  07.09.09 12:56 Автор: HandleX <Александр М.> Статус: The Elderman
 |  
|  |  
|  |  | Все проще: чувак не подозревает о cуществовании break;  26.08.09 04:59 Автор: Zef <Alloo Zef> Статус: Elderman
 |  
|  |  
 
 
 |  |