информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыВсе любят медАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Блокировка российских аккаунтов... 
 Отзыв сертификатов ЦБ РФ, ПСБ,... 
 Памятка мирным людям во время информационной... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
у Страуструпа есть пример похожей техники 25.08.09 23:13  Число просмотров: 2766
Автор: 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), дающая какой-то выигрыш в скорости, в других случаях за такой код надо убивать мучительной смертью.
<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
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2022 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach