powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / возможности switch()
25 сообщений из 65, страница 2 из 3
возможности switch()
    #39761191
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

Пропустишь такое через review?
...
Рейтинг: 0 / 0
возможности switch()
    #39761195
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSiemargl,

Пропустишь такое через review?Чтобы не выглядеть умным, я лучше на днях посмотрю, что пишут профи в МИСРА С++ итп =)
...
Рейтинг: 0 / 0
возможности switch()
    #39761205
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот взял какой-то свой старый кусок кода. И сделал несколько нейтральных преобразований.
Скобки там... namespaces. Логика сохранена но какие-то элементы читаемости утеряны.
Попробуйте не компилируя и не запуская прокомментировать что здесь и как происходит.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
       int cnt = 000;
	for(int i=000;i<=077;i+=01) {{
          for(int i=000;i<=1;i+=01)            
            i::i=000;
	    for(;!(i::i>077);){
                printf("count = %i, i=%o, i=%o, i=%o, i=%o  \n", cnt, i >> 3 , i % 010, i::i / 010, i::i % 010);
                i::i+=01;
                cnt+=01;
            }    
        }}
...
Рейтинг: 0 / 0
возможности switch()
    #39761208
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, ты полагаешь, восьмеричная система счисления кого-то сильно смутит? :)

Предлагаю расставить все точки над "i" :\
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
int cnt = 000;
for(int i=000;i<=077;i+=01)
{
  {  //-- Назачем? ><
    for(int i=000;i<=1;i+=01) i::i=000;  // -- Зачем здесь этот цикл? Бессмыслица... Достаточно лишь i::i = 0
    for(;!(i::i>077);)  // -- Выполнится 64*64 раза, приращение внутри цикла
    {
      printf("count = %i, i=%o, i=%o, i=%o, i=%o  \n", cnt, i >> 3 , i % 010, i::i / 010, i::i % 010);
      i::i+=01;
      cnt+=01;
    }    
  }
}
...
Рейтинг: 0 / 0
возможности switch()
    #39761210
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кого-то switch смущал.

Но синтаксические конфеты switch легко проверяются. В 1 запуск с отладкой.

Циклы поверить сложнее. Больше условий надо учесть.
...
Рейтинг: 0 / 0
возможности switch()
    #39761542
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglmaytonSiemargl,

Пропустишь такое через review?Чтобы не выглядеть умным, я лучше на днях посмотрю, что пишут профи в МИСРА С++ итп =)
Запрещено в MISRA C - недостижимый код до 1й метки
...
Рейтинг: 0 / 0
возможности switch()
    #39761544
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglSiemarglпропущено...
Чтобы не выглядеть умным, я лучше на днях посмотрю, что пишут профи в МИСРА С++ итп =)
Запрещено в MISRA C - недостижимый код до 1й метки
Слава богу. Я уж думал там совсем языковая анархия.
...
Рейтинг: 0 / 0
возможности switch()
    #39762194
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСлава богу. Я уж думал там совсем языковая анархия.Отсутствие языковой анархии проблем в коде не решает. Моё личное мнение: оно (отсутствие) их добавляет.
...
Рейтинг: 0 / 0
возможности switch()
    #39762251
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кто нить попробуйте аналогичную штуку в шарпах. Мне кажется мы должны получить ошибку компилляции.
...
Рейтинг: 0 / 0
возможности switch()
    #39762408
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА кто нить попробуйте аналогичную штуку в шарпах. Мне кажется мы должны получить ошибку компилляции.
Так и есть. Нельзя там код вставлять между switch() и case. C# switch()
...
Рейтинг: 0 / 0
возможности switch()
    #39762440
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Java тоже нельзя. Нарушение синтаксиса.
...
Рейтинг: 0 / 0
возможности switch()
    #39762562
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,

А код, очень понятен! Прозрачен, как твои пластиковые окна (А грязь на них - глупый коллектив. Который нужно постоянно в саки макать из за некомпетентности)

Давай разберём, почему это фича, а не говно - код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    register n = (count + 7) / 8; // Определим, сколько нужно циклов по 8 в строке

    switch (count % 8) { // Изначально, у нас может быть 10 символов 8 и 2 символа. Что ровно 10 % 8 = 2
    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); // Теперь, прогоним оставшейся 8+ символов, если они имеются по формуле (count + 7) / 8 
    }



А теперь представь, что без данной фичи, нам надо развернуть цикличный цикл
Код: plaintext
1.
2.
    while (--count >= 0)
        *to++ = *from++;



Что значит, при каждом проходе, у нас есть проверка X >= 0 когда она существует в том коде раз в 8 тактов

Конечно же, умные компиляторы которые сейчас есть, поймут что пользователь делает данный код, и вставит свою реализацию move

А вот древние компиляторы такого не умели. И процессоры были другие, и на то время код с фичей такой считался очень быстрым

.. А сейчас же, во всех процессорах по стандарту идёт SSE и он вставит скорее её. И прирост будет огромный как хер подзаборный
...
Рейтинг: 0 / 0
возможности switch()
    #39762563
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, данную фичу можно применять, но не в переносе строк в другую. А для чего нибудь другого, что требует такую же логику обработки. Но не может за раз перенести не 8 не 4 не 2 байта )))) xD
...
Рейтинг: 0 / 0
возможности switch()
    #39762695
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идет о копировании строк то данный шаблон скорее не применяется.
...
Рейтинг: 0 / 0
возможности switch()
    #39762703
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо..коллектив. ..из за некомпетентности..

ну, судя по коду - писал его лох от сей.
1) использование констант в коде +1 шаг к увольнению.
2) если надо использовать скорость копирования, то откройте для себя стандартные функции библиотек (и как они решают эти дела. тут надо бы сказать про ту обезьяну которая не использует опыт человечества ранее накопленный) +10 шагов к увольнению, с записью в трудовую о не компетентности в данной области
3) время сколько затратит другой разработчик который заглянет в этот код? 5 секунд? 5 минут? Или 30 минут лазанья по компиляторам, с проверкой - а что хотел автор, правильно ли они превращают идею автора в результат, как это адаптировать к другим условиям которые пришли с выше... +5 шагов к увольнению организатора работ к допуску этого горе программиста к коду.
4) ... там ышо можно наковырять существенные минусы этого говнокода...

удачи вам, она вам потребуется
(круглый)
...
Рейтинг: 0 / 0
возможности switch()
    #39762708
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метрика Холстеда покажет небольшое число. Но сложность этого кода - в нестандартом оформлении.
Это такой себе brain-fuck для собеседований. Не для production кода.
...
Рейтинг: 0 / 0
возможности switch()
    #39762722
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok01) использование констант в коде +1 шаг к увольнению.
Это очень смешное замечание в применении к данному примеру кода.
Пример того как не вдумываясь буквально применяют правила ))
...
Рейтинг: 0 / 0
возможности switch()
    #39762725
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote Anatoly Moskovsky]kolobok0...не вдумываясь буквально применяют правила ))

Вы правы и не правы одновременно.
В плане форума - да, важнее не это.
В плане кода - тот кто писал, не открывал альма-матер C&R

для хэллоу ворда - это не заметно. на больших проектах это задница.
(круглый)
...
Рейтинг: 0 / 0
возможности switch()
    #39762729
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0,

Ну перепишите без констант - посмотрим на читаемость ))
...
Рейтинг: 0 / 0
возможности switch()
    #39762736
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да разве в константах дело. Скажите по честному кто помнит порядок срабатывания метки case 0: и начала цикла с постусловием do?

Я без проверки на 2-3 компилляторах не скажу что и как.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    register n = (count + 7) / 8; // Определим, сколько нужно циклов по 8 в строке

    switch (count % 8) { // Изначально, у нас может быть 10 символов 8 и 2 символа. Что ровно 10 % 8 = 2
    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); // Теперь, прогоним оставшейся 8+ символов, если они имеются по формуле (count + 7) / 8 
    }
...
Рейтинг: 0 / 0
возможности switch()
    #39762757
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа разве в константах дело. Скажите по честному кто помнит порядок срабатывания метки case 0: и начала цикла с постусловием do?
Метка это адрес кода, который идет после нее. Т.е. case 0 это адрес начала цикла do.
...
Рейтинг: 0 / 0
возможности switch()
    #39762773
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же самое по скорости (в оригинале упор на скорость), проигрыш в размере. читаемость 100%

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
register n = count / 8;

while (n-- > 0)
{
  *to = *from++;
  *to = *from++;
  *to = *from++;
  *to = *from++;
  *to = *from++;
  *to = *from++;
  *to = *from++;
  *to = *from++;
}

switch (count % 8)
{
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++;
case 0:
  break;
}
...
Рейтинг: 0 / 0
возможности switch()
    #39762794
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо...
...надо развернуть цикличный цикл
Код: plaintext
1.
2.
    while (--count >= 0)
        *to++ = *from++;



...


Вы даже не в ту степь пример привели. Изначально сбив меня с панталыку. Обратите внимание, что в оригинальной статье нет приращение указателя приёмника. И дано объяснение, что это указатель на ячейку вывода в адресном пространстве. И этот нюанс накладывает ограничения к применению станадартных либ по копированию.
Ваш же пример - решает стандартная библиотека копирования. Общий схематоз - узнаём сколько больших блоков можем за "один шаг" копирнуть, копируем большие блоки. Далее добиваем мелочёвкой.

(круглый)
...
Рейтинг: 0 / 0
возможности switch()
    #39762796
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0То же самое по скорости (в оригинале упор на скорость), проигрыш в размере. читаемость 100%
Насчитал столько же констант ))
...
Рейтинг: 0 / 0
возможности switch()
    #39762802
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа разве в константах дело. Скажите по честному кто помнит порядок срабатывания метки case 0: и начала цикла с постусловием do?

Так понятнее? ))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
    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);
    }
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / возможности switch()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]