Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
Все проще: чувак не подозревает о cуществовании break; 26.08.09 04:59 Число просмотров: 2960
Автор: Zef <Alloo Zef> Статус: Elderman
|
|
<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
|
|
|
|