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

    +59

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    QByteArray icqMessage::convertToByteArray(const quint8 &d)
    {
    	QByteArray packet;
    	packet[0] = d;
    	return packet;
    }

    Обнаружено в сорцах qutim'а. Про memcpy разработчики, видимо, не слышали, также, как и про метод append() в классе QByteArray.
    А еще не совсем понятно, зачем функции для конвертирования байт-эррэев в цифры и обратно объявлены и реализованы В КАЖДОМ файле, где используются. Про #include файла, в котором один раз можно реализовать все функции, разработчики, наверное, тоже слышали мельком.

    RankoR, 23 Февраля 2010

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

    +65.5

    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
    BOOL needToCenter = NO;
    float touchedDistance = [self getTouchedDistance];
    
    if(movedFromX < movedToX)
    {
    	if(!isIncreased)
    	{
    		needToCenter = YES;
    	}
    }
    else
    {
    	if(!isIncreased)
    	{
    		needToCenter = YES;
    	}
    }

    ohoncharuk, 22 Февраля 2010

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

    +69.5

    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
    #include <iostream>
    using namespace std;
    class MyException
    {
    public:
    	MyException(char *msg) { m_msg = msg; }
    	~MyException(){}
    	char *GetError(){return m_msg;}
    protected:
    	char *m_msg;
    };
    
    int main()
    {
    	int *buffer;
    	try
    	{
    		buffer = new int[255];
    		if (buffer == NULL)
    		{
    			MyException *exception = 
    					new MyException("Memory allocation failed!");
    			throw exception;
    		}
    		else
    			delete buffer;
    	}
    	catch (MyException *exception)
    	{
    		char *msg = exception->GetError();
    		cout << msg << endl;
    	}
    return 0;
    
    }

    Книга "Использование Viusal C++" Кейт Грегори. Глава 24 о предотвращении утечек памяти и работе с исключениями.

    ccoder, 20 Февраля 2010

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

    +65.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
    template <class T>
    struct SLinkedListNode
    {
    public:
    	SLinkedListNode* m_pPrev;  ///<  Pointer to previous node.
    	SLinkedListNode* m_pNext;  ///<  Pointer to next node.
    	int Initialize();
    	int Finalize();
    };
    ...
    struct SWaiterNode : public SLinkedListNode<SContainerNode>, public SLinkedListNode<SWaiterListNode>
    {
    ...
    // container node
    struct SContainerNode
    {
    	// no members needed yet (just for masking SLinkedListNode type)
    };
    
    // container
    struct SContainer
    {
    public:
    	SLinkedListNode<SContainerNode>* m_pObjects;

    сначала делаем тимплейтный класс, параметр которого никому не нужен, а потом делаем заглушку для этого параметра.
    нормально.

    kubrinsky, 19 Февраля 2010

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

    +66.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
    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
    // Компилировать: g++ -o test reghead.cpp object1.cpp regtail.cpp main.cpp
    
    //================== object.h: ==================
    struct Object {
    	const char *name;
    	unsigned char props[0];
    };
    
    extern Object *head, *tail;
    enum {PROPTYPE_BYTE = 0x40, PROPTYPE_WORD = 0x80};
    enum {PROP_DESC = 1, PROP_LASTSTRING, PROP_COLOR, PROP_MASS, PROP_END = 0};
    
    #define DECLARE_OBJECT(name) \
    extern Object Object_##name, *name##_reg; \
    Object *name##_reg __attribute__((section("oreg"))) = &Object_##name;\
    Object Object_##name = {#name}; \
    namespace name##_props {
    
    #define PROP_BYTE(id, value) unsigned char id##_1 = id | PROPTYPE_BYTE, id##_2 = value;
    #define PROP_WORD(id, value) unsigned char id##_1 = id | PROPTYPE_WORD, id##_2[2] = {value & 0xff, value >> 8};
    #define PROP_STRING(id, value) unsigned char id##_1 = id; unsigned char id##_2[] = value;
    #define END_PROPS unsigned char final = PROP_END; }
    
    //================== reghead.cpp: ==================
    #include "object.h"
    Object *head __attribute__((section("oreg"))) = 0;
    
    //================== regtail.cpp: ==================
    #include "object.h"
    Object *tail __attribute__((section("oreg"))) = 0;
    
    //================== object1.cpp: ==================
    #include "object.h"
    
    DECLARE_OBJECT(object1)
    PROP_BYTE(PROP_COLOR, 14)
    PROP_WORD(PROP_MASS, 300)
    PROP_STRING(PROP_DESC, "description")
    END_PROPS
    
    //================== main.cpp: ==================
    #include <stdio.h>
    #include <string.h>
    #include "object.h"
    
    int main()
    {
    	Object **obj = &head;
    	while (++obj <= &tail) {
    		if (*obj == NULL)
    			continue;
    		printf("Object: %s\n", (*obj)->name);
    		unsigned char *props = (*obj)->props;
    		int id;
    		while ((id = *props) != PROP_END) {
    			if (id < PROP_LASTSTRING) {
    				char *value = (char *)props+1;
    				props = (unsigned char *)value + strlen(value) + 1;
    				switch (id) {
    				case PROP_DESC:
    					printf("    Description: %s\n", value);
    					break;
    				}
    			} else {
    				int value;
    				switch (id >> 6) {
    				case 1:
    					value = *((unsigned char *)(props+1));
    					props += 2;
    					break;
    				case 2:
    					value = *((unsigned short *)(props+1));
    					props += 3;
    					break;
    				}
    				switch (id & 63) {
    					case PROP_COLOR:
    						printf("    Color: %d\n", value);
    						break;
    					case PROP_MASS:
    						printf("    Mass:%d\n", value);
    						break;
    				}
    			}
    		}
    	}
    }

    Прошу прощения за длинный пример, но не мог не поделиться. Написано по мотивом кода из того же ZDaemon – примерно так там задаются и обрабатываются свойства объектов. Работает только с компилятором GCC. Если вы поняли, как это работает, а также почему подобный говнокод работает с gcc версии 3.2 и может зависать с более поздними версиями – можете по праву гордиться собой.

    Arseniy, 13 Февраля 2010

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

    +68.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    void TInputTID::AvWnd(GtkWidget* w, char* name, int bOut, void (*cb) (int wnd, int data))
    {
        // Тут объявления локальных переменных и не относящиеся к делу манипуляции
        if(((int)cb) != -1) // Шедевр
        {
          gtk_signal_connect ((GtkObject*)hButOK,
                               "clicked",GTK_SIGNAL_FUNC(cb),hOutWndBox);
        }
    }

    Вечное сияние чистого разума. Новое слово в арифметике указателей.

    mutanabbi, 13 Февраля 2010

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

    +63.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
    14. 14
    15. 15
    16. 16
    struct window_t
    {
        int Frame;
        int Window;
        int Title;
    };
    
    int TWindowTID::CreateWindow(int width,int height,int posX,int posY,int WindowType,int &win)
    {
        GtkWidget* fixed;
        fixed = get_new_fixed()
        window_t* w0 = new window_t;
        // здесь всякие разные манипуляции разной степени бессмысленности
        w0->Window=reinterpret_cast<int>(fixed);
        return static_cast<int>(w0->Window);
    }

    Буйство кастов

    mutanabbi, 12 Февраля 2010

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

    +929.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    page_t* make_page()
    {
     page_t* p = new page_t;
     // заполнение
     return p;
     delete(p);
    }

    я в шоке... не знаю что хотел сказать аффтар (недоступен)... не могу даже прокомментировать ЭТО %)

    zaufi, 11 Февраля 2010

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

    +53.4

    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
    void __fastcall TUsers::DBG2DrawColumnCell(TObject *Sender,
          const TRect &Rect, int DataCol, TColumn *Column,
          TGridDrawState State)
    {
    
        const int iIsChecked[2] = {DFCS_BUTTONCHECK | DFCS_FLAT, DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT};
        int DrawState;
        TRect DrawRect;
        if (State.Contains(gdFocused) == true)
        {
            if (Column->Field->FieldName == dbchkApplyDoc2->DataField)
            {
                ShowMessage("Зацикливает :( ");
                ShowMessage("Эта надпись будет повторяться бесконечно - почему ???");
            }
        }
        else
        {
            if (Column->Field->FieldName == dbchkApplyDoc2->DataField)
            {
                DrawRect = Rect;
                InflateRect(&DrawRect, -2, -2); // Matters ?
                DrawState = iIsChecked[Column->Field->AsBoolean];
                DBG2->Canvas->FillRect(Rect);
                DrawFrameControl(DBG2->Canvas->Handle, &DrawRect, DFC_BUTTON, DrawState);
            }
        }
    }

    Почему

    Nemerle, 11 Февраля 2010

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

    +68.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
    // I'VE SO FUCKED CONVERTING THOSE FUCKING TYPES OF STUPID DATA
    		// TAKE IT, FUCKING STRAUSTRUP AND K&R!!!!!!!!!!!
    		if (text[i]=='1') (intarray[i]=1);
    		if (text[i]=='2') (intarray[i]=2);
    		if (text[i]=='3') (intarray[i]=3);
    		if (text[i]=='4') (intarray[i]=4);
    		if (text[i]=='5') (intarray[i]=5);
    		if (text[i]=='6') (intarray[i]=6);
    		if (text[i]=='7') (intarray[i]=7);
    		if (text[i]=='8') (intarray[i]=8);
    		if (text[i]=='9') (intarray[i]=9);
    		if (text[i]=='0') (intarray[i]=0);

    i0ngunn3r, 11 Февраля 2010

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