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

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

    +16

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    #include <iostream>
    using namespace std;
    
    struct T{int a;T(){cout<<"T"<<this<<endl;}~T(){cout<<"~T"<<this<<endl;}};
    struct D:public T{int b;D(){cout<<"D"<<this<<endl;}~D(){cout<<"~D"<<this<<endl;}};
    
    int main() {
       T* a = new D[2];
       cout<<"mission failure"<<endl;
       delete[] a;   
       return 0;
    }

    Писал тест специально для Тараса:
    Виртуальный деструктор в базовых классах нужен:
    *Для вызова деструкторов всех потомков. Иногда это не нужно, тк поля структуры тривиальны. Согласен с Тарасом.
    *Для правильного выбора перегруженного оператора delete. Создал одним менеджером памяти, а удалил в другой - это плохо. Но также бывает редко и только в специфичных проектах.
    Но вот то, что демонстрируется в этом примере - думаю чего-нибудь такого создатели той библиотеки, что ковырял Тарас, и опасались.
    Не просто было вызван деструктор только для предков, забыв о деструкторах потомков, но и:
    *Деструктор предков был вызван для this не по тем адресам, где расположены объекты.
    Не удивлюсь, если:
    *В некоторых кулхацкерских реализациях менеджеров памяти будет удален буфер меньшего размера и куча попортится или оставшаяся не удаленная часть массива в куче просто утекет.
    http://liveworkspace.org/code/2X3MR0$8

    LispGovno, 22 Декабря 2012

    Комментарии (48)
  3. C++ / Говнокод #12165

    +16

    1. 1
    2. 2
    3. 3
    //...
       ret.value(_val != "" ? _val : "");
    //...

    bodeaux, 21 Ноября 2012

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

    +16

    1. 1
    2. 2
    3. 3
    struct WideParams
    {
        WideParams(size_t CountParameters...):

    Посоны, это бомба. Вот что я обнаружил в проекте.

    LispGovno, 12 Ноября 2012

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

    +16

    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
    QString QSqlResultPrivate::positionalToNamedBinding()
    {
        int n = sql.size();
    
        QString result;
        result.reserve(n * 5 / 4);
        bool inQuote = false;
        int count = 0;
    
        for (int i = 0; i < n; ++i) {
            QChar ch = sql.at(i);
            if (ch == QLatin1Char('?') && !inQuote) {
                result += qFieldSerial(count++);
            } else {
                if (ch == QLatin1Char('\''))
                    inQuote = !inQuote;
                result += ch;
            }
        }
        result.squeeze();
        return result;
    }
    
    // Пример запроса:
    // select * from some where d_t = "2012-11-08 12:00:00"

    Словили сегодня вот такой глюк в кутишечке.

    База данных отлично понимает строки и даты в двойных кавычках, все это даже работало какое-то время. Но когда попытались исполнить запрос с таймштампом в двойных кавычках (как в строке 25), начала возникать ошибка в духе "непонятные символы в дате". В одинарных же кавычках все работало. После копания в исходниках и гуглёжки выяснилась и причина - QtSql в упор не видит двойных кавычек, и пытается проставить в них именованные параметры (в нашем случае :00, :00)...

    Если кому нужен быстрофикс - берем тут: https://bugreports.qt-project.org/browse/QTBUG-27159

    bormand, 08 Ноября 2012

    Комментарии (11)
  6. C++ / Говнокод #12061

    +16

    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
    void keyStart(int key,void (*func)())
    {
      while(SDL_PollEvent(&keyEvent))
      {
        switch(keyEvent.type)
        {
          case SDL_KEYDOWN:
            switch(keyEvent.key.keysym.sym)
            {
              /*Выход*/
              case SDLK_ESCAPE:
              func();
              break;
              case SDLK_w:
              func();
              break;
              case SDLK_q:
              func();
              break;
              default:
              break;
            }
          break;
          default:
          break;
        }
      }
          
    }

    Функция высшего порядка, мужики. Сами знаете откуда.

    LispGovno, 06 Ноября 2012

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

    +16

    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
    #include <functional>
    
    using namespace std;
    
    class O{};
    
    class foo
    {
    public:
       constexpr static auto anyGarbage = O(O(O(O())));//:Жаль, что написать auto anyGarbage = O(O(O(O()))); нельзя.
       O anyGarbage2 = O(O(O(O())));
       
    private:
       int var;
       
    public:
       std::function<void(int)> setter=[this](int s){(void)s;/*var=s;*/};
    };

    Я хочу написать свои property, принимающие лямбды в качестве параметра setter и getter. Как сделать friend лямбду?
    http://liveworkspace.org/code/39082e70108502c2e44c4fe6c5762d9a

    USB, 26 Октября 2012

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

    +16

    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
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    template<typename T1, typename T2, size_t OFFSET = 8>
    struct EnumMult
    {
        template<T1 t1, T2 t2>
        struct Static
        {
            static const size_t V = (t1 << OFFSET) | t2;
        };
    
        static size_t Dynamic(T1 t1, T2 t2)
        {
            return (t1 << OFFSET) | t2;
        }
    };
    
    // example
    #include <iostream>
    
    enum Suit
    {
        SPADES,
        CLUBS,
        DIAMONDS,
        HEARTS
    };
    
    enum Value
    {
        SEVEN,
        EIGHT,
        NINE,
        TEN,
        JACK,
        QUEEN,
        KING,
        ACE
    };
    
    int main()
    {
        typedef EnumMult<Suit, Value> CardMult;
        switch (CardMult::Dynamic(CLUBS, SEVEN))
        {
        case CardMult::Static<SPADES, ACE>::V:
            std::cout << "ACE OF SPADES";
            break;
        case CardMult::Static<CLUBS, SEVEN>::V:
            std::cout << "HOOK";
            break;
        default:
            std::cout << "NOTHING SPECIAL";
        }
        std::cout << std::endl;
        return 0;
    }

    Понадобилось обработать два enum'а конструкцией switch-case, подумал, что было бы круто сделать квадратный свитч-кейс, но пришла и другая идиотская идея: шаблон для декартова умножения двух енумов. Заранее извините, если паттерн известный.

    vercetti, 07 Июля 2012

    Комментарии (61)
  9. Куча / Говнокод #4983

    +16

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    div.field.field-type-filefield.field-field-videofile,
    div.field.field-type-filefield.field-field-videoftp,
    .content .field-field-videofile div.field-items, 
    .content .field-field-videoftp div.field-items,
    .content .field-field-videofile div.field-item, 
    .content .field-field-videoftp div.field-item{clear:both;overflow:hidden;display:block;}
    .field-field-videofile div.field-label-inline-first, 
    .field-field-videofile div.field-label-inline,
    .field-field-videoftp div.field-label-inline-first,
    .field-field-videoftp div.field-label-inline{clear:both;overflow:hidden;display:block;visibility:visible;}

    Вот такой вот css родил. кстате где CSS разметко здеся?

    brainstorm, 19 Декабря 2010

    Комментарии (22)
  10. PHP / Говнокод #387

    +16

    1. 1
    /* а в этих ваших пхп и джаваскрипт есть ==== и !=== ? */

    guest, 14 Января 2009

    Комментарии (3)
  11. PHP / Говнокод #252

    +16

    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
    --------CSS----------
    .window {
    	position:fixed;
    	height:300px;
    	width:300px;
    	background: #FCFDCC;
    }
    .window .wlt {
    	float: left;
    	height:15px;
    	width:11px;
    	background: url("design/wlt.gif");
    }
    .window .wrt {
    	float: right;
    	height:15px;
    	width:11px;
    	background: url("design/wrt.gif");
    }
    .window .wct {
    	height:15px;
    	width: 100%;
    	background: url("design/wct.gif");
    }
    
    .window .content {
    	float: left;
    }
    --------HTML--------------------
    <div class="window">
     <div class="wlt"></div>
     <div class="wrt"></div>
     <div class="wct"></div>
    </div>

    Как заставить этот код работать в ИЕ7?

    guest, 23 Декабря 2008

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