1. Си / Говнокод #12534

    +111

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    /* ..от молодых, дерзких и успешных,
    форматирование и комментарии сохранены. */
    void zanulit_massiv ()
    {
    	int i;
    	for(i=0;i<27;i++) // dlja vseh elementov massiva
    	{
    		switch (i)   // perebiraem
    		{
    		case 0: mass_znach[0]=3;
    		case 1: mass_znach[0]=5;
    		case 2: mass_znach[0]=6;
    		case 3: mass_znach[0]=1;
    		case 4: mass_znach[0]=2;
    		case 5: mass_znach[0]=3;
    		case 6: mass_znach[0]=4;
    		case 7: mass_znach[0]=5;
    		case 8: mass_znach[0]=6;
    		case 9: mass_znach[0]=31;
    		case 10: mass_znach[0]=2;
    		case 11: mass_znach[0]=1;
    		case 12: mass_znach[0]=1;
    		case 13: mass_znach[0]=1;
    		case 14: mass_znach[0]=33;
    		case 15: mass_znach[0]=15;
    		case 16: mass_znach[0]=13;
    		case 17: mass_znach[0]=8;
    		case 18: mass_znach[0]=43;
    		case 19: mass_znach[0]=2;
    		case 20: mass_znach[0]=9;
    		case 21: mass_znach[0]=14;
    		case 22: mass_znach[0]=17;
    		case 23: mass_znach[0]=21;
    		case 24: mass_znach[0]=22;
    		case 25: mass_znach[0]=8;
    		case 26: mass_znach[0]=5;
    		default: break; // objazatelno v sluchae neizvesnogo znacheniya
    		}
    	}
    }

    Не могу больше :|

    Запостил: neudachnik, 03 Февраля 2013

    Комментарии (35) RSS

    • Эм... Т.е. эта функция присваиевает нулевому индексу 5. А почему "znulit"? Это откуда вообще? :)
      Ответить
    • Астрологи объявили неделю зануления массивов.
      Ответить
      • Скорее неделю инициализации массивов.
        Ответить
    • Not sure if trolling or just so stupid.
      Ответить
    • Зануление потому что нулевого элемента массива?
      // objazatelno v sluchae neizvesnogo znacheniya
      // vdrug cikl rabotaet neverno

      Ответить
    • Зато этот код работает оптимально, потому что он написан на СИ и обращается к напрямую по адресу массива, учите матчасть про устройство массива в языке СИ. И оптимальный код зачастую будет выглядеть очень плохо и будет очень раздутым, но энтерпрайзному быдлу, привыкшему к тормозным абстракциям, не понять.
      Ответить
      • ты явно не в тот топик это запостил
        Ответить
      • Ты хочешь сказать, что
        void zanulit_massiv ()
        {
            mass_znach[0] = 5;
        }
        будет работать медленнее? ;)
        Ответить
        • это может работать НЕВЕРНО. вдруг этот mass_znach[0] завязан на какой-нибудь порт?
          Ответить
          • Нуу, если оно описано как volatile... возможно да.
            Ответить
            • И даже если не описано как volatile, но является портом, то всё равно будет работать неверно :)
              Ответить
              • > И даже если не описано как volatile, но является портом, то всё равно будет работать неверно :)

                Причем если это порт и не volatile, то работать будет неверно не только в моей версии, но и в оригинале ;)

                Компилятор волен комбинировать не volatile записи так, как ему хочется, процессор тоже (x86 так не делает, но емнип ARM любит откладывать запись на потом).
                Ответить
                • >не только в моей версии, но и в оригинале ;)
                  именно.
                  У меня вообще складывается впечатление, а вдруг это попытка реализовать генератор "случайных" чисел с выводом на LPT-порт, скажем.
                  Ответить
          • или еще каким то загадочным образом страница памяти с mass_znach оказалась в свапе,всмысле медленней
            Ответить
            • Фишка в том, что если там нет volatile, то замена всего того кода на mass_znach[0] = 5 не может ухудшить корректности программы, и если это не сделаем мы, то это сделает компилятор. Увидеть промежуточные значения может только второй поток, а работа с двумя потоками без синхронизации, барьеров или атомиков - неопределенное поведение, под которое вполне попадают и пятерка и 42 и вообще любой мусор.

              P.S. Выхлоп GCC на O2:
              _Z14zanulit_massivv:
              .LFB31:
                      .cfi_startproc
                      movl    $5, mass_znach
                      ret
              Ответить
      • Апплодирую стоя.
        Ответить
        • Присядьте, пожалуйста, ни хрена не видно же что там происходит!
          Ответить
    • и все же интересно, по какой логике выбирались числа в правой части присваивания...
      Ответить
    • >zanulit_massiv
      Это прекрасно. Плюсую только за гениальное название того что делает функция.
      for+switch - срочно в палату мер.
      Ответить
      • Вы правы. Угадали. По порядку:
        1. Данная "программа" работает на PIC'e индоконторы "Microchip".
        2. Данные (массив mass_znach), есть конфигурация для жележочки, для передачи по RS-232.
        3. [0] - ошибка автора, сука копипастер "забыл" он.
        Данные для записи (начальной конфигурации) по битикам из документации расчитывал я, мне доверили, грязную блядь работу. А вот выдать и написать "программу" (сука 300-400 строк с полным фаршем проверками и пр.) не доверили. Автор высрал "это" и доказывал мне, что мол я это мудило не правильно расчитал конфигурацию.
        P.S. это понос бля жидчайший... одно хрошо, дома, отдыхаю, больничный..
        Ответить
    • Отличный код, всё предусмотрено. Он просто с двоичной системы всё ещё не перешёл на С, вот подсознательно и пишет.
      Ответить
    • А ведь никто в комментариях не обратил внимания, что ветви в switch не заканчиваются break’ом, кроме ветки default, которая находится в самом конце и break там излишен.
      Ответить
      • Просто тут все нормальные люди ушли с этого блядского говнища си на нормальные паскальные языки, в которых запись без бряка естественна, поэтому они не обратили внимания на его отсутствие.
        Ответить
      • я обратил, однако ж тут что с брейком что без и так хорошо
        Ответить
    • Если это не жуткий изврат с потоками,типа датчика псевдослучайных чисел.
      То можно переписать так:
      void zanulit_massiv ()
      {
      mass_znach[0]=5;
      }
      Как правильно заметили break только один в конце.
      Ответить

    Добавить комментарий