1. Лучший говнокод

    В номинации:
    За время:
  2. Pascal / Говнокод #4966

    +109

    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
    procedure RemoveDir(path: string);
    var
      sr: TSearchRec;
    begin
      if FindFirst(path + '\*.*', faAnyFile, sr) = 0 then
      begin
        repeat     
          if sr.Attr and faDirectory = 0 then
            DeleteFile(path + '\' + sr.name);
          else
              RemoveDir(path + '\' + sr.name);
        until
          FindNext(sr) <> 0;
      end;
      FindClose(sr);
      RemoveDirectory(PChar(path));
    end;

    История такова, писал я как-то программу по курсовому. (Это было еще года два-три назад, когда я про юнит тесты и различные технологии проектирования и разработки ничего не знал.) По задумки программа распаковывала некие файлы во временный каталог рядом с приложением и по завершению работы с ними удаляла эту папку вот этим методом. Итак, запустил я эту подпрограмму на выполнение для проверки ее работоспособности и смотрю в файловом менеджере, что папка успешно удалилась и все ок. Но вдруг студия начала жаловаться что нет каких-то файлов, я смотрю в файловый менеджер и вижу что файлы проекта программы исчезают буквально на глазах! Естественно я резко убиваю программу и далее начинаю восстанавливать исходники. Благо, что делал бэкапы и эта подпрограмма проработала все ничего, а ведь последствия могли быть еще больше. А мораль такая, нужно быть предельно внимательным, когда работаешь с удалением какой-либо информации.

    P.S. Нужно добавить проверку между 10 и 11 строкой:
    if (sr.Name <> '..') and (sr.Name <> '.') then

    vanished, 18 Декабря 2010

    Комментарии (20)
  3. Pascal / Говнокод #4907

    +109

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    procedure TForm2.ExitButtonClick(Sender: TObject);
    begin
    Close;
    Form1.Close;
    end;

    Об Application.Terminate даже и не догадываемся...

    PEMOHT, 12 Декабря 2010

    Комментарии (14)
  4. Си / Говнокод #4510

    +109

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    /*
    * The dump header describes the contents of a crash dump.  Two headers
    * are written out: one at the beginning of the dump, and the other at
    * the very end of the dump device.  The terminal header is at a known
    * location (end of device) so we can always find it.  The initial header
    * is redundant, but helps savecore(1M) determine whether the dump has been
    * overwritten by swap activity.  See dumpadm(1M) for dump configuration.
    */
    #define	DUMP_MAGIC	0xdefec8edU		/* dump magic number */

    вот такая сигнатура у крэшдампа соляриса

    bugmenot, 02 Ноября 2010

    Комментарии (20)
  5. C# / Говнокод #3711

    +109

    1. 1
    if (embededDatasourceItem.Text.Localized(language) == string.Empty)

    Это вместо string.IsNullOrEmpty

    imshaman, 16 Июля 2010

    Комментарии (2)
  6. PHP / Говнокод #3348

    +109

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if(!mysql_select_db($db_name,$data)){
         print "<BR>";
         echo mysql_error();
         die();
        }

    Нашел в одном из движков онлайн игры

    Vasiliy, 30 Мая 2010

    Комментарии (35)
  7. C# / Говнокод #3221

    +109

    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
    private void timer1_Tick(object sender, EventArgs e)
    
            {
    
                Process[] myP = Process.GetProcessesByName("TASKMGR");
    
                foreach (Process p in myP)
    
                {
    
                    p.CloseMainWindow();
    
                }
    
            }

    Защита! Чтобы студенты не махлевали. Программа закрывается только вводом пароля. Таймер хуярит форму все время поверх всех окон и люто ненавидит все, что похоже на "диспетчер задач"...

    Anderson, 13 Мая 2010

    Комментарии (22)
  8. C# / Говнокод #732

    +109

    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
    class A{}
    class B:A{}
    class C
    {
    A EA;
    void M(A AA, decimal Key)
    {
    EA=AA;
    EA.Work();
    }
    }
    
    class D
    {
    C EC=new C();
    
    void M()
    {
    EC.M(new A());
    }
    }

    Форматирование сохранено.
    К этому прилагается такой литорический вопрос:
    EC.M(new A());
    Как тут вызвать конструктор B?

    guest, 18 Марта 2009

    Комментарии (8)
  9. C# / Говнокод #489

    +108.8

    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
    ...
    IEnumerable<Status> Statuses;
    
    public Status GetCurrentStatus1() {
      var e = Statuses.GetEnumerator();
      e.MoveNext();
      return e.Current;
    }
    
    public Status GetCurrentStatus2() {
      foreach (var e in Statuses)
        return e;
      return null;
    }
    
    public Status GetCurrentStatus3() {
      return Statuses.FirstOrDefault();
    }

    Возник вопрос - что больший говнокод? Или есть вариант лучше? (3 вариант хорош, но только когда .NET 3 есть)

    guest, 01 Февраля 2009

    Комментарии (4)
  10. Pascal / Говнокод #2627

    +108.7

    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
    Function GetFmtTime:String;
    var
      tmpD : string;
      crdate: TDateTime;
    begin
      crdate := Now;
      tmpD := IntToStr(YearOf(crdate))+'-';
    
      If MonthOf(crdate)<10 Then tmpD := tmpD + '0';
      tmpD := tmpD + IntToStr(MonthOf(crdate))+'-';
    
      If DayOf(crdate)<10 Then tmpD := tmpD + '0';
      tmpD := tmpD + IntToStr(DayOf(crdate))+'(';
    
      If HourOf(crdate)<10 Then tmpD := tmpD + '0';
      tmpD := tmpD + IntToStr(HourOf(crdate)) + '-';
    
      If MinuteOf(crdate)<10 Then tmpD := tmpD + '0';
      tmpD := tmpD + IntToStr(MinuteOf(crdate)) + '-';
    
      If SecondOf(crdate)<10 Then tmpD := tmpD + '0';
      tmpD := tmpD + IntToStr(SecondOf(crdate)) + ')';
    
      Result := tmpD;
    end;

    А почему бы не использовать обычную FormatDateTime?!
    До моего прихода на фирму все пользовались выше приведенным кодом! (и много еще чем!)

    Antonio_net, 17 Февраля 2010

    Комментарии (2)
  11. Си / Говнокод #1959

    +108.6

    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
    /**
     * Копирует первое большое число во второе.
     *
     * @param a большое число приемник
     * @param b большое число источник
     * @param n длинна больших чисел в словах
     *
     * @return FALSE - четное, TRUE - нечетное
     */
    void int_copy(uword_t *a, const uword_t *b, const int n)
    {
        memcpy(a, b, sizeof(a[0]) * n);
    }

    Вот такую милую функцию я нашел в проекте над которым работаю.

    pvkr2, 12 Октября 2009

    Комментарии (32)