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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Я когда писал что то типа компилятора си натыкался на кучу подобных нюансов 26.08.09 01:30  Число просмотров: 2896
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Я лично о возможности такой конструкции не знал, остальные
> сотрудники тоже. Оригинальный switch содержал десяток
> кейсов в таком стиле.

switch это фактически просто goto, а case - метка для этого goto. Можно вставлять в циклы, уловия и пр.. Все тело switch-а линейно (поэтому надо делать break-и, если не хочешь провалиться в следующий case).

Вот только сотрудника надо бы лишить премии за такое. Нельзя было сделать if (x) {doFirst(); break;} с "проваливанием" в case 2 по !x ?

Такими "оптимизациями" обычно любят заниматься недавние школьники.
<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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach