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

    +8.1

    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
    // файлToolStripMenuItem
    			// 
    			this->файлToolStripMenuItem->Name = L"файлToolStripMenuItem";
    			this->файлToolStripMenuItem->Size = System::Drawing::Size(54, 22);
    			this->файлToolStripMenuItem->Text = L"Файл";
    			this->файлToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::файлToolStripMenuItem_Click);
    			// 
    			// Form1
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(292, 260);
    			this->Controls->Add(this->button1);
    			this->Controls->Add(this->menuStrip1);
    			this->MainMenuStrip = this->menuStrip1;
    			this->Name = L"Form1";
    			this->Text = L"Form1";
    			this->menuStrip1->ResumeLayout(false);
    			this->menuStrip1->PerformLayout();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 }
    	private: System::Void меню1ToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    			 }
    private: System::Void файлToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    		 }
    private: System::Void выходToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    		 }
    };

    MS VS 2005 - MS VS 2008 это спокойно компилирует, да ещё и сама код генерирует, когда на формочке рисуешь русское меню.
    Этот компилятор определённо соответсвует стандарту С++.

    Говногость, 18 Августа 2009

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

    +13.1

    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
    ...
    
    class TCar
    {
    public:
    	TCar(int Speed)
    	{
    		...
    	};
    };
    
    ...
    
    void destroy_Car(TCar Car)
    {
    	...
    };
    
    ...
    
    void GameLogic()
    {
    	...
    	
    	destroy_Car(50);
    	
    	...
    };
    
    ...

    Хорошая логика...

    Говногость, 18 Августа 2009

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

    +12.2

    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
    TMutex CriticalGlobalRTOSMutex;
    
    ...
    
    void CriticalDoing()
    {
    	CriticalGlobalRTOSMutex.Lock();
    
    	...
    
    	if( !HorriblyDoing(...) )
    	{
    		throw FatalException;
    	};
    
    	...
    
    	CriticalGlobalRTOSMutex.UnLock();
    };
    
    ...

    Мне уже страшно...

    Говногость, 18 Августа 2009

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

    +12.1

    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
    class TIntArray
    {
    	char buf[10000];
    	int operator[](int Index);
    };
    
    ...
    
    void main()
    {
    	TIntArray a;
    	...
    	memset(&a[1],0.0f,sizeof(TIntArray));
    	...
    };

    Меня этот кот довёл до слёз...

    Говногость, 18 Августа 2009

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

    +13.1

    1. 1
    2. 2
    3. 3
    #define REGISTER_PACKET(cls, type)\
    __declspec(selectany) PacketType cls::s_type = CPacketFactory::RegisterPacket(type, cls::CreateNew); \
    __pragma(comment(linker, "/include:?s_type@##cls##@@2W4PacketType@@C"))

    Очень правильный код... Делать можно только так.

    Говногость, 18 Августа 2009

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

    +7.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    float *val32;
    val32 = new(float);
    *val32 = 0.0f;
    memcpy((float*)(((char*)val32)+0), buf+(i*4)+0, 1);
    memcpy((float*)(((char*)val32)+1), buf+(i*4)-1, 1);
    memcpy((float*)(((char*)val32)+2), buf+(i*4)+2, 1);
    memcpy((float*)(((char*)val32)+3), buf+(i*4)+1, 1);
    
    int value = device->DownValue32(*val32, start + (i*2) - 2);
    
    free (val32);

    Заводить переменные с стеке это для лохов. Реальные пацаны все выделяют в стеке.

    pathfinder, 18 Августа 2009

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

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    std::string s1;
    std::string s2;
    
    int ret = strcmp(s1.c_str(), s2.c_str());  //А здесь мы сравниваем строки
    if (ret == 0)
    {
        .... 
    }

    pathfinder, 18 Августа 2009

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

    +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
    if(isMoving)
    {
    	std::map<int, unsigned char> dirToFrame = boost::assign::map_list_of(1, 10)(2, 5)(3, 6)(4, 7)(5, 8)(6, 9)(7, 12)(8, 11);
    	if(dir >= 1 && dir <= 10)
    		return dirToFrame[dir];
    
    	throw std::string("Something very wrong1.");
    }
    else //if(isMoving)
    {
    	std::map<int, unsigned char> dirToFrame = boost::assign::map_list_of(1, 13)(2, 0)(3, 1)(4, 2)(5, 3)(6, 4)(7, 15)(8, 14);
    	if(dir >= 1 && dir <= 10)
    		return dirToFrame[dir];
    
    	throw std::string("Something very wrong1.");
    }

    Кусок кода из open source игры. Выбирает кадр спрайта, в зависимости от направления героя. В ревизии, предшествующей этой, использовался switch.

    just_geek, 18 Августа 2009

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

    +14.1

    1. 1
    2. 2
    3. 3
    4. 4
    bool IsTranslucent() const
    {
    	return !!Translucent;
    }

    Зачем двойное отрицание?
    Наверное потому, что Translucent имеет тип BOOL из windows.h и приведение ее к bool даст нежелательный warning.

    schizoid2, 17 Августа 2009

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

    +6.9

    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
    #ifndef SOCHET_H
    #define SOCHET_H
    
    // Сдвигает самую младшую единицу в сторону младшего разряда
    #define shiftLast1Right(x) ( (x-1)^((x^(x-1)) >> 2) )
    
    // Дописывает 1 после самой младшей единицы
    #define add1AfterLast1(x) ( x | ((x^(x-1))+1) >> 2 )
    
    template<class T>
    class Sochet
    {
    public:
    	T value;
    
    	//////////////////////////////////////////////////////////////////////////
    
    	Sochet():value(0) { }
    	Sochet(int n, int k) {
    		firstTurn(n, k);
    	}
    	~Sochet() {
    		value = 0;
    	}
    
    	//////////////////////////////////////////////////////////////////////////
    
    	// Первая комбинация
    	// В первоначальной ситуации все К единиц располагаются в старших битах
    	void firstTurn(int n, int k) {
    		value = ( ( T(1) << k ) - 1 ) << (n - k);
    	}
    
    	// Нахождение следующей комбинации
    	// Возвращает false в случае последней комбинации
    	bool nextTurn()
    	{
    		// Отлов последней комбинации
    		if (value & (value+1) == 0)
    			return false;
    		
    		// Условие по младшему биту: 1 или 0
    		if (value & 1)
    		{
    			value >>= 1;
    			nextTurn();
    			value = add1AfterLast1(value << 1);
    		} else
    			value = shiftLast1Right(value);
    		
    		return true;
    	}
    }
    
    #endif // SOCHET_H

    Шаблон перебора всех сочетаний/выборок в много разрядных числах.
    Пример перебираемых чисел для N=5, K=3:
    11100
    11010
    11001
    10110
    10101
    10011
    01110
    01101
    01011
    00111

    // Код выглядит сочно(особенно дефайны), зато всё работает максимально быстро.
    // Статья про этот алгоритм: http://k06a.blogspot.com/2009/04/blog-post_08.html

    k06a, 15 Августа 2009

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