1. C++ / Говнокод #9421

    +999

    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
    #include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    
    const size_t MB = 1024*1024;
    size_t MOD = 0;
    
    unsigned char uniqueNumber () {
      static unsigned char number = 0;
      return ++number % MOD;
    }
    
    int main(int argc, char** argv) {
      if (argc < 3) {
        return 1;
      }
    
      size_t BLOCK_SIZE = atoi(argv[1]) * MB;
      MOD = atoi(argv[2]);
    
      unsigned char* garbage = (unsigned char *) malloc(BLOCK_SIZE);
    
      std::generate_n(garbage, BLOCK_SIZE, uniqueNumber);
      std::sort(garbage, garbage + BLOCK_SIZE);
    
      free(garbage);
    
      return 0;
    }

    http://habrahabr.ru/blogs/cpp/138132/

    It makes me cry. Понятно, что это всего лишь демонстрационный пример. Но все таки это не оправдание. Итак, начнем по порядку с самого худшего:
    1. Сишные malloc/free вперемешку с STL-алгоритмами. WTF? Зачем?
    2. Глобальная переменная? Автор не осилил хотя бы bind? Который, к тому же, уже давно std::bind.
    3. Uppercase для локальной переменной.
    4. Отступ в джва пробела.

    invi, 15 Февраля 2012

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

    +997

    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
    void TexQ::Move()
    {
    	mx = quad.v[0].x;
    	my = quad.v[0].y;
    	if(hge->Input_GetKeyState(HGEK_RBUTTON) || hge->Input_KeyDown(HGEK_LBUTTON))
    	{
    		hge->Input_GetMousePos(&nx, &ny);
    		move = true;
    		sx = GetPositionX();
    		sy = GetPositionY();
    		subx = nx - sx;
    		suby = ny - sy;
    
    		if ( abs(subx) > abs(suby) ) 
    		{
    			iter = abs(subx);
    			ms = subx;
    			subx = (subx < 0) ? -1.0f : 1.0f;
    			suby = (suby < 0 ) ? suby/abs(ms) : abs(suby/ms);
    		}
    		else 
    		{
    			iter = abs(suby);
    			ms = suby;
    			suby = (suby < 0) ? -1.0f : 1.0f;
    			subx = (subx < 0 ) ? subx/abs(ms) : abs(subx/ms);
    		}
    	}
    
    	if (move) 
    	{	
    		if (iter >= shift)
    		{
    			iter-=shift;
    			this->SetPosition(
    				GetPositionX() + subx * shift, 
    				GetPositionY() + suby * shift);
    		}
    		else
    		{
    			this->SetPosition(nx , ny);
    			move = false;
    		}
    
    	}
    
    }

    Хреновый из меня математик. Этот метод втыкается в функцию фрейминга. И текстура едет по прямой туда, куда мышью тыкнешь.
    Позже узнал, как можно тригонометрией в 5 строк написать такую же )

    idec, 14 Февраля 2012

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

    +153

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    dData->RowCount++;
    
             for (int i = 0; i < dData->RowCount - 1; i++)
                   for (int j = 0; j < dData->ColumnCount; j++)
                        dData->Rows[i]->Cells[j]->Value = dData->Rows[i + 1]->Cells[j]->Value;

    Мучил седня DataGridView, при dData->RowCount++ создавалась новая строчка в таблице, но только сверху. Остальное съезжало вниз на 1 ячейку. Я боролся полчаса с этим, пока не объяснил проблему товарищу. он предложил свой вариант всего кода:
    dData->Rows->Add();
    :DDDD

    idec, 14 Февраля 2012

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

    +1013

    1. 1
    if (!done && (done = true)) setlocale(LC_CTYPE, "");

    из свежих ворнингов компилера.

    Dummy00001, 14 Февраля 2012

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

    +148

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    vector<long long> fib;
    	for
    	(
    		long long a=1,b=1;
    		b=a+b,a=a+b,a>0&&b>0;
    		cout<<b<<" "<<a<<endl,
    		fib.push_back(b),
    		fib.push_back(a)
    	);

    Just outputting fibonacci numbers as pairs and storing them in a vector...

    wyand, 14 Февраля 2012

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

    +997

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    for (int z=NewArray[y-1];z<(NewArray[y]-1);z++)
                    {
                      AnsiString ts = IntToStr(z+1);
                      int inum = -1;
                      try{
                        inum = StrToInt(ts);
                      } catch(...) {}
    ..... //дальше inum не используется
                    }

    Завис надолго. Так и не понял, зачем автор преобразовывает ts обратно

    dm-ua, 10 Февраля 2012

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

    +1014

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    #ifndef _WIN32
        std::ostream  * dpOutputStream;
    #else
            ostream  * dpOutputStream;
    #endif

    делаем код портабельным.

    Dummy00001, 08 Февраля 2012

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

    +1003

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    class fileOutStream : public ostream
    {
    public:
        /* ... */
        virtual inline int printf( const char * fpFormat, ... )
        {
            /* ... */
        }
        /* ... */
    }

    virtual inline метод.

    Dummy00001, 08 Февраля 2012

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

    +1004

    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
    class FuncFileOutStream: public fileOutStream
    {
    public:
    	/* ... */
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, bool b);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, char c);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, long l);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, int i);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, short s);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, const char* pc);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, float f);
    	friend FuncFileOutStream& operator<<(FuncFileOutStream& out, double d);
    	/* ... */
    };

    попытка перенаправления данных проходящих через ostream.

    только маленькая тонкость. fileOutStream уже перенакрывает ostream специально для этой цели - что бы собственный streambuf подставить, который данными проходящими через ostream и манипулирует используя два официальных виртуальных метода - вместо дюжины корявых операторов которые наверное и половины того что проект испульзует не покрывают. ну бляха муха поэтому же и сделали streambuf в стандарте, что бы вот таким маразмом не страдали...

    Dummy00001, 08 Февраля 2012

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

    +1007

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    #if defined( HPUX_11_31 )
    #define BDYNAMIC_CAST( CLASS, OBJECT )  (( CLASS ) ( OBJECT ))
    #else
    #define BDYNAMIC_CAST( CLASS, OBJECT )  (dynamic_cast< CLASS >(( OBJECT )))
    #endif

    чуть кофе не похлебнулся.

    при более детальном рассмотрении кода из-за которого это сделали, выяснилось что: (А) в проекте нет ни одного места где нужен динамик каст и (Б) половина наших С++ профисианалов не умеют пользоватся конст кастом (который по коду там и был им нужен, вместе со статик кастом).

    Dummy00001, 08 Февраля 2012

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