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

    +132

    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
    for (int i=0;i<16;i++)
    {
    	if ((rbuf[i+1]>>16)!=(1<<i))
    	{
    		break;
    		res=SOME_ERROR;
    	}
    };
    
    /* in another function */
    DWORD * rbuf =new DWORD[Size];
    ...
    if (rbuf!=NULL) free(rbuf);

    Вот такими библиотеками пользуются клиенты некоторых фирм ;)

    Запостил: klaks, 15 Февраля 2012

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

    • Автор - Гитлер.
      Ответить
    • new/free() - я насколько понял авторы большинства (по крайней мере UNIX) STL/libc библиотек забили с этим говном сражатся, и просто сделали что бы работало. (таже херня с new[]/delete.)

      у нас на проекте этого дохера - но на куче систем работает. я давлю где вижу - ну да я ж один. против легионов.

      ЗЫ а в чем именно ссуть загадочного цикла, я честно говорю не улавливаю.
      Ответить
      • Вот не понятно мне, код из раздела "Си", откуда там new вообще?
        А для free() проверка на не нулл не нужна.
        Ответить
    • про цикл тоже не поняли с коллегой. выявилось при переносе библиотеки на линух :)
      мысль запостить на говнокод пришла не сразу, поэтому море срача сюда не попало.
      и самое главное - все работало :)
      Ответить
    • Unreachable code же
      Ответить
      • это понятно )) компилятор просто убрал этот цикл наверняка
        Ответить
    • А я бы сказал, что основная говнофишка тут - ненужная ';' после тела цикла 'for'. Ничего плохого от нее не случается, но вот неприятный осадочек создает моментально.
      Ответить
      • А откуда растут ноги у этой нелюбви к };
        ?
        Ответить
        • это свидетельство о незнании пациента зачем вообще в языке нужна ;
          Ответить
          • А зачем это чисто академическое знание, которые всё равно на код не влияет?
            Ответить
            • если программист на С/С++ настолько слабо подготовленный, что не знает (и гадает) где правильно ставить точку с запятой, значит с вероятностью 100% весь остальной код он выполнит на том же слабом уровне

              если программист не понимает рефлекторно, что {} тут уже самостоятельный stmt и дописывание ; делает второй stmt, значит написанную неверно элементарнейшую ситуацию if () {}; else {}; он будет исправлять только после ругательств компилятора

              т.к. программист не может написать базовые вещи верно с первой попытки, значит ему надо дальше читать книжки и набираться опыта, а не доказывать, что дескать он заранее понимал, что компилятор проигнорирует лишний пустой stmt, ведь он гуру
              Ответить
              • > если программист на С/С++ настолько слабо подготовленный, что не знает (и гадает) где правильно ставить точку с запятой, значит с вероятностью 100% весь остальной код он выполнит на том же слабом уровне

                А может, он знает, просто такая привычка?
                Вкусовщина чистая это всё. И судить о профессиональном уровне по таким мелочам стиля кода - это тупо.
                Вот прикинь, чувак пришёл на собеседование и за полчаса написал суперкрутой быстрый алгоритм, а ему в ответ - "вы не приняты, вы ставите ; после }". А он в ответ нахуй пошлёт, очевидно.
                Ответить
                • > Вот прикинь, чувак пришёл на собеседование и за полчаса написал суперкрутой быстрый алгоритм, а ему в ответ - "вы не приняты, вы ставите ; после }".
                  бывают конечно уебаны:
                  первые, кто имеют такие дурные привычки как "; после}", но "суперкруты",
                  вторые, кто говорит первым: "вы не приняты, вы ставите ; после }".
                  Ответить
                • обычно на собеседовании люди не знают как вывести энный бит числа, как перевернуть строку или благодаря какой простой вещи при выходе из строя одного из трёх хардов в рейде информация не теряется, какой еще суперкрутой алгоритм? насмешил

                  если он на собеседовании сделает }; это будет всего лишь повод спросить его зачем он так сделал - может переволновался

                  когда человек в коде, который он написал в комфортной обстановке, ставит ; после } - это 100% означает, что у него нет нормального опыта программирования на С++ - он в своей жизни банально МАЛО писал таких конструкций на С++, и хоть конкретно этот недочет очень быстро исправить, 100% всплывут миллион других недочетов

                  и да, обычно программиста берут на работу, чтобы он реализовывал задачи по ТЗ, разрабатывая корректный, поддерживаемый и приемлемый по быстродействию код, а не писал write-only код, итерации жизненного цикла которого "всё удаляем, пишем заново", поэтому суперкрутые алгоритмы на собеседованиях не задают (кроме узкоспециализированных областей, где кандидат должен знать эти алгоритмы для соответствия вакансии)
                  Ответить
                  • вот так и происходит )) ту библиотеку мы все мечтаем переписать, когда будет свободное время. этот человек насрал практически во всех наших продуктах!
                    Ответить
                • Вы, TarasB, живете в иллюзии. да, этот человек быстро кодил, его программы даже работали. но он ушел. а говнокод остался. теперь другие должны тратить свое время, чтобы все переписать по-человечески и с документацией. спрашивается: почему нельзя было сразу сделать нормально?
                  Ответить
    • Вброс. Просто унылый вброс.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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