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

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

    +56.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    UINT aScrollMode = 0;
         m_pScrollH->GetInfo(&aScrollMode, 0, 0);
         if (!(aScrollMode & M_INVISIBLE))
         {
              ...
         }

    Рефакторю довольно большой проект (5 Мб исходников). Единственный способ спросить у контрола (любого из имеющихся) привожу выше.

    Konstantin.Grebenschikov, 22 Октября 2009

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

    +56

    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
    std::map<int, int> aSummator; //Массив частичных сумм
    std::vector<int> v; //Исходный массив
    
    void InitSummator()
    {
        aSummator[0] = v[0];
        aSummator[-1] = 0;
    
        for(int i = 1; i < int(v.size()); i++)
        {
            aSummator[i] = aSummator[i - 1] + v[i];
        }
    }
    
    int GetSum(int l, int r)
    {
        return aSummator[r] - aSummator[l - 1]; 
    }

    Как я писал сумматор 0.1 года назад. Вместо того, чтобы написать один if, я использовал std::map, что увеличило ассимптотику алгоритма на запрос с O(1) до O(log(n)). Но задачу при тех ограничениях (в массиве до 100000 элементов, запросов не более 100000) алгоритм решил. Преподу, естественно, показывать забоялся.

    Janycz, 03 Апреля 2015

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

    +56

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    int count = 0;
    while (condition) {
        if (count == 5) { // Kind of like sleeping for 0.2 milliseconds
            Sleep(1);
            count = 0;
        }
        // Do whatever.
        count++;
    }

    Последний ответ, показывает способ усыпить комп на 0.2 ms. И это после ответов со всякими сокетами, boost-таймерами и прочей мутью. Ответ такой типа, эй, чуваки вы ничо не понимаете, вот как надо, удобно же че бы нет))
    http://stackoverflow.com/questions/85122/how-to-make-thread-sleep-less-than-a-millisecond-on-windows/11456112#11456112

    vitaly, 17 Марта 2015

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

    +56

    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
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    template<typename T, typename E=emp> class _interlock;
    		template<typename T> class _interlock
    			<T,
    			typename std::enable_if<
    				std::is_same<
    					typename std::conditional<
    						std::is_same<udi,typename std::make_unsigned<T>::type>::value,
    						udi,
    						uqi
    					>::type,
    					typename std::make_unsigned<T>::type
    				>::value
    			>::type
    			>
    		{
    		public:
    
    			_interlock
    				<T,
    				typename std::enable_if<
    				std::is_same<
    				typename std::conditional<
    				std::is_same<udi,typename std::make_unsigned<T>::type>::value,
    				udi,
    				uqi
    				>::type,
    				typename std::make_unsigned<T>::type
    				>::value
    				>::type
    				>
    				(T x=0)
    			{
    				number=x;
    			}
    
    			//Возвращается прежнее значение
    			T operator + (T x)
    			{
    				return (T)InterlockedExchangeAdd((_unsign_t*)&number,(_sign_t)x);
    			}
    
    			//Возвращается прежнее значение
    			T operator - (T x)
    			{
    				return (T)InterlockedExchangeAdd((_unsign_t*)&number,-(_sign_t)x);
    			}
    
    			//Чтение
    			T operator () ()
    			{
    				return number;
    			}
    
    			//Замена на x
    			T operator () (T x)
    			{
    				return (T)InterlockedExchange((_unsign_t*)&number,(_unsign_t)x);
    			}
    
    			//Сравнение с y, замена на x, если равны
    			T operator () (T x, T y)
    			{
    				return (T)InterlockedCompareExchange((_unsign_t*)&number,(_unsign_t)x,(_unsign_t)y);
    			}
    			
    			T operator ++ ()
    			{
    				return (T)InterlockedExchangeAdd((_unsign_t*)&number,1)+1;
    			}
    
    			T operator -- ()
    			{
    				return (T)InterlockedExchangeAdd((_unsign_t*)&number,-1)-1;
    			}
    
    			T operator ++ (int)
    			{
    				return (T)InterlockedExchangeAdd((_unsign_t*)&number,1);
    			}
    
    			T operator -- (int)
    			{
    				return (T)InterlockedExchangeAdd((_unsign_t*)&number,-1);
    			}
    
    		private:
    			typedef typename std::make_unsigned<T>::type _unsign_t;
    			typedef typename std::make_signed<T>::type _sign_t;
    			volatile T number;
    		};

    Функция "ИЛИ" для типов через type_traits для шаблона. А также атомарный: сумматор, счётчик, компаратор с возможностью условной и безусловной замены значения в одном лице. Для типов: udi (unsigned int), sdi (signed int), uqi (unsigned long long), sqi (signed long long). Тип emp = void (от слова empty).

    Tirannozavr, 13 Марта 2015

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

    +56

    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
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    void split_int(int num)
    {
        int i1,i2,i3,i4,i5,i6,i7,i8,i9,MAX = 10;
        for(i1 = 1; i1 < MAX; i1++)
        {
            if(i1 == num)
                    printf("%d = %d\r\n",i1,num);
            for(i2 = 1; i2 < MAX; i2++)
            {
                if(i1 + i2 == num)
                    printf
                    (
                        "%d + %d = %d\r\n",
                        i1,i2,num
                    );
                for(i3 = 1; i3 < MAX; i3++)
                {
                    if(i1 + i2 + i3 == num)
                        printf
                        (
                            "%d + %d + %d = %d\r\n",
                            i1,i2,i3,num
                        );
                    for(i4 = 1; i4 < MAX; i4++)
                    {
                        if(i1 + i2 + i3 + i4 == num)
                            printf
                            (
                                "%d + %d + %d + %d = %d\r\n",
                                i1,i2,i3,i4,num
                            );
                        for(i5 = 1; i5 < MAX; i5++)
                        {
                            if(i1 + i2 + i3 + i4 + i5 == num)
                                printf
                                (
                                    "%d + %d + %d + %d + %d= %d\r\n",
                                    i1,i2,i3,i4,i5,num
                                );
                            for(i6 = 1; i6 < MAX; i6++)
                            {
                                if(i1 + i2 + i3 + i4 + i5 + i6 == num)
                                    printf
                                    (
                                        "%d + %d + %d + %d + %d + %d = %d\r\n",
                                        i1,i2,i3,i4,i5,i6,num
                                    );
                                for(i7 = 1; i7 < MAX; i7++)
                                {
                                    if(i1 + i2 + i3 + i4 + i5 + i6 + i7 == num)
                                        printf
                                        (
                                            "%d + %d + %d +%d + %d + %d + %d = %d\r\n",
                                            i1,i2,i3,i4,i5,i6,i7,num
                                        );
                                    for(i8 = 1; i8 < MAX; i8++)
                                    {
                                        if(i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 == num)
                                            printf
                                            (
                                                "%d + %d + %d + %d + %d + %d + %d + %d = %d\r\n",
                                                i1,i2,i3,i4,i5,i6,i7,i8,num
                                            );
                                        for(i9 = 1; i9 < MAX; i9++)
                                            if(i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 == num)
                                                printf
                                                (
                                                    "%d + %d + %d + %d + %d + %d + %d + %d + %d = %d\r\n",
                                                    i1,i2,i3,i4,i5,i6,i7,i8,i9,num
                                                );
                                    }
     
                                }
                            }
                        }
                    }
                }
            }
        }
        printf("\r\n");
    }

    С одного известного форума.

    DesmondHume, 04 Февраля 2015

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

    +56

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    bool XIsEmptyString( LPCTSTR str )
    {
    	CString s(str);
    	s.TrimLeft();
    	s.TrimRight();
    
    	return ( s.IsEmpty() || s == _T("") );
    }

    Кажется разработчика настиг приступ паранойи.

    Взято из библиотека XMLite

    German_1984, 23 Января 2015

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

    +56

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    `        enum SearchFlag
             {
                 IgnoreCase = 0x00000001,    ///< Case differences are ignored
    -            WholeWorlds = 0x00000002    ///< Only whole words are matched
    +            WholeWords = 0x00000002    ///< Only whole words are matched
             };

    очепятка + копи-паста = world domination.

    http://lists.freedesktop.org/archives/poppler/2015-January/011251.html

    http://cgit.freedesktop.org/poppler/poppler/commit/?id=78abf540057181b708c546aee421f81a1dd5 8331

    Dummy00001, 22 Января 2015

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

    +56

    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
    #include <iostream>
    #include <thread>
    #include <list>
    #include <functional>
    #include <chrono>
    using namespace std;
    
    void outputToSomeContainer(int val, list<int>& result){
       result.push_back(val);
    }
    
    class async{
      list<thread> a;
    public:
      async(){}
      async(async&& a): a(move(a.a))
      {}
      void addTask(function<void()>&&f){
        a.emplace_back(move(f));
      }
      void wait(){
        for(auto&& i: a)
          i.join();
      }
    };
    
    async async_O_n_Sort(const list<char>& unsorted, function<void(int)> outputToContainer){
      async a;
      for(int i: unsorted)//O(n)
        a.addTask([i, outputToContainer](){this_thread::sleep_for(chrono::milliseconds(5+i*10));outputToContainer(i);});
      return a;
    }
    
    int main() {
      list<char> unsorted {1, 0, 6, 3, 4};
      list<int> sorted;
      auto a = async_O_n_Sort(unsorted, bind(outputToSomeContainer, placeholders::_1, ref(sorted)));
      cout<<"А мы веселые пельменья, мы похоже на варенья"<<endl;
      a.wait();
      for(int i: sorted)
          cout<<i<<endl;
      return 0;
    }

    Тред:

    http://www.gamedev.ru/flame/forum/?id=196521
    http://coliru.stacked-crooked.com/a/c317bee4dbe183ab

    laMer007, 05 Января 2015

    Комментарии (91)
  10. C++ / Говнокод #17314

    +56

    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
    int GUIFont::getTextSize (std::string::iterator &begin, std::string::iterator &end ) { 
        int size = 0; 
        while(begin != end ) { 
            uint32_t id = utf8::unchecked::next (begin ); 
            CharDescriptor *cd = chars- >getChar(id); 
            size += cd- >xadvance; 
        } 
        return size;
    } 
    
    int GUIFont::getTextSize (std::string &text ) { 
        return getTextSize (text.begin (), text.end ());
    } 
    
    int GUIFont::getTextSize (std::wstring &text ) {
        std::string utf8text;
        utf8::utf16to8 (text.begin (), text.end (), back_inserter (utf8text ));
        return getTextSize (utf8text.begin (), utf8text.end ());
    }

    Вот так я зафейлил...
    И что самое главное - студия сожрала и даже ворнинга не кинула, а эклипс ни в какую.
    Без добрых людей на гейдеве не допер бы что к чему.

    Pythoner, 15 Декабря 2014

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

    +56

    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
    if(i%2==0)
    		{
    			for(j=int (l);j<n+int (l);j++)
    			{
    				A[i][j]=B1[k];
    				k++;
    			}	
    		}
    		else if(i%2!=0)
    		{
    			for(j=int (l);j<n+int (l);j++)
    			{
    				A[i][j]=B2[k];
    				k++;
    			}
    		}

    Когда-то один однокурсник спросил у препода:
    - А как добавить код в ИНАЧЕ от ИНАЧЕ.
    Что-то подобное увидел и в этом коде.

    FalseCoder, 11 Декабря 2014

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