1. Си / Говнокод #2612

    +135.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
    inline void clearbufshort (void *buff, unsigned int count, WORD clear)
    {
            if (!count)
                    return;
            SWORD *b2 = (SWORD *)buff;
            if ((int)b2 & 2)
            {
                    *b2++ = clear;
                    if (--count == 0)
                            return;
            }
            do
            {
                    *b2++ = clear;
            } while (--count);
    }

    Наткнулся на такой вот шедевр в коде ZDaemon. Это аналог memset, только заполняет не байтами, а словами.

    Кстати, там же рядом есть функция, запполняющая двойными словами:

    inline void clearbuf (void *buff, int count, SDWORD clear)
    {
    SDWORD *b2 = (SDWORD *)buff;
    while (count--)
    *b2++ = clear;
    }

    Arseniy, 13 Февраля 2010

    Комментарии (6)
  2. Си / Говнокод #2611

    +137.6

    1. 1
    w = (GtkWidget*)(*((int*)(lw->data)));

    Объект для медитаций

    mutanabbi, 13 Февраля 2010

    Комментарии (20)
  3. Си / Говнокод #2605

    +137.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
    36. 36
    37. 37
    38. 38
    39. 39
    void TWindowTID::SetStyle(GtkWidget* widget, const char *form, gint Red_, gint Green_, gint Blue_)
    {
        struct _GtkStyle *style;
        GdkColor bg;
        style=gtk_style_new();
        bg.red = Red_;
        bg.blue = Blue_;
        bg.green = Green_;
        if (form=="TEXT")
        {
            style->fg[GTK_STATE_NORMAL]=bg; //TEXT
        }
        else
            if (form=="BORDER")
            {
                style->base[GTK_STATE_NORMAL]=bg; //BORDER
            }
            else
                if (form=="ALL")
                {
                    style->bg[GTK_STATE_NORMAL]=bg;
                    style->base[GTK_STATE_NORMAL]=bg; //BORDER
                    style->fg[GTK_STATE_NORMAL]=bg; //TEXT
                }
                else
                    if (form=="button")
                    {
                        style->bg[GTK_STATE_PRELIGHT]=bg;
                        style->base[GTK_STATE_PRELIGHT]=bg; //BORDER
                        style->bg[GTK_STATE_SELECTED]=bg;
                        style->base[GTK_STATE_SELECTED]=bg; //BORDER
                    }
                    else
                    {
                        style->bg[GTK_STATE_NORMAL]=bg;
                    }
        style->font = gdk_font_load("-adobe-helvetica-*-r-*-*-12-*-*-*-*-*-*-*");
        if ((GtkWidget *)widget!=NULL) gtk_widget_set_style((GtkWidget *)widget, style);
    }

    Сравнение строк умиляет

    mutanabbi, 12 Февраля 2010

    Комментарии (4)
  4. Си / Говнокод #2600

    +96.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
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    ......
                     int a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0;
                     for (int i=0;i<arl->Count;i++)
                     {
                        if(arl[i]<0.1)
                        {
                            a1++;
                        }
                        if(arl[i]<0.2&&arl[i]>0.1)
                        {
                            a2++;
                        }
                        if(arl[i]<0.3&&arl[i]>0.2)
                        {
                            a3++;
                        }
                        if(arl[i]<0.4&&arl[i]>0.3)
                        {
                            a4++;
                        }
                        if(arl[i]<0.5&&arl[i]>0.4)
                        {
                            a5++;
                        }
                        if(arl[i]<0.6&&arl[i]>0.5)
                        {
                            a6++;
                        }
                        if(arl[i]<0.7&&arl[i]>0.6)
                        {
                            a7++;
                        }
                        if(arl[i]<0.8&&arl[i]>0.7)
                        {
                            a8++;
                        }
                        if(arl[i]<0.9&&arl[i]>0.8)
                        {
                            a9++;
                        }
                        if(arl[i]<1&&arl[i]>0.9)
                        {
                            a10++;
                        }
                     }
    .....

    определение количества элементов в каждом диапазоне. Было написано быстро и влоб, т.к ничего красивее придумать не смог, да и времени не было.

    KoirN, 11 Февраля 2010

    Комментарии (12)
  5. Си / Говнокод #2546

    +136

    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
    #define alias long
    #define int b
    #define cat 2
    alias int=cat;
    #undef int
    
    int a$(int b)
    {
      return 1;
    }
    
    main()
    {
      return a$(b)+1;
    }

    Здесь нет С++, зато есть... bash!
    На что спорим, что код возврата программы будет 1?

    nil, 05 Февраля 2010

    Комментарии (19)
  6. Си / Говнокод #2543

    +144.8

    1. 1
    void updateEach(void *ptr, void *unused)

    chipmunk update method
    chipmunk - физический движок (типа под iPhone) на сях. Прелесть, правда?

    FIZZER, 04 Февраля 2010

    Комментарии (16)
  7. Си / Говнокод #2530

    +138.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
    sprintf(cmd, "%supd_downloader -p upd_downloader\\bin %s %s -a %s", 
    #if defined(__unix__)
    	"./",
    #else
    	"",
    #endif
    	arg1, 
    	option->arg2 ? arg2 : "", 
    #if defined(__i386__) || defined(_M_X86)
    	"i686"
    #else
    	"x86_64"
    #endif
    );
    res = run_command(cmd);

    Обнаружил в коде. Типа портируемый код =) Да еще и sprintf() ...

    del, 02 Февраля 2010

    Комментарии (13)
  8. Си / Говнокод #2527

    +134.8

    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
    #include "stdafx.h"
    #include "conio.h"
    #include "time.h"
    #include "stdlib.h"
    #include "windows.h"
    #include <iostream>
    
    
    using namespace std;
    void go()
    { int m[10],maxi,mini,max,min,temp;
    srand(time(NULL));
    for(int i=0;i<10;i++)
    m[i]=rand()%30;
    max=0;
    for(int i=0;i<10;i++)
    {if(m[i]>max) { max=m[i]; maxi=i;};
    }
    
    min=max;
    for(int i=0;i<10;i++)
    {if(m[i]<min) {min=m[i]; mini=i;};
    
    }
    for(int i=0;i<10;i++)
    cout<<m[i]<<endl;
    
    m[maxi],m[mini]=m[mini],m[maxi];
    temp=m[maxi];
    m[maxi]=m[mini];
    m[mini]=temp;
    
    
    cout<<"============"<<endl;
    for(int i=0;i<10;i++)
    cout<<m[i]<<endl;
    
    
    cout<<"alala=="<<max<<endl;
    cout<<"ololo=="<<min<<endl;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    go();
    
    getch();
    
    
    	return 0;
    }

    хе-хе, друг написал , меняет макс и мин элементы местами)

    Bor1k, 02 Февраля 2010

    Комментарии (9)
  9. Си / Говнокод #2526

    +100

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #include <iostream>
    int main(void)
    {
      for (int i=0;i<600000000;i++)
      cout<<"Ten minuters";
    //IT Works!
    }

    Реальный код с cyberforum. Задание звучало как "Написать таймер, каждые 10 минут выводящий какое-нибудь сообщение". Один умник написал такое нечто, от чего я просто впал в ступор.

    darkcheg, 02 Февраля 2010

    Комментарии (32)
  10. Си / Говнокод #2502

    +136.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
    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
    BOOLEAN
    KiCheckForAtlThunk (
        IN PEXCEPTION_RECORD ExceptionRecord,
        IN PCONTEXT Context
        )
    
    /*++
    
    Routine Description:
    
        This routine will determine whether an access violation was raised due to
        an attempt to execute an ATL thunk in a no-execute, non-stack area.
    
        If so, the thunk will be emulated and execution resumed.
    
    Arguments:
    
        ExceptionRecord - Supplies a pointer to an exception record.
    
        Context - Supplies a pointer to a context frame.
    
    Return Value:
    
        TRUE - Context was updated to reflect the emulated ATL thunk, resume
               execution.
    
        FALSE - Not an ATL thunk, continue raising the exception.
    
    --*/
    
    //.........
    //KiDispatchException:
    //......
     switch (ExceptionRecord->ExceptionCode) {
            case STATUS_BREAKPOINT:
                ContextFrame.Eip--;
                break;
    
            case KI_EXCEPTION_ACCESS_VIOLATION:
                ExceptionRecord->ExceptionCode = STATUS_ACCESS_VIOLATION;
                if (PreviousMode == UserMode) {
                    if (KiCheckForAtlThunk(ExceptionRecord,&ContextFrame) != FALSE) {
                        goto Handled1;
                    }
    
    //................

    Объявление KiCheckForAtlThunk (втыкать в комменты и название =)) ) Для тех кто в танке: исходники Windows, оконные классы ATL выделяют тупо в хипе кусок-переходник, который заменяет HWND, идущий первым параметром в оконную процедуру, на естественный, объектно-ориентированный this. Так вот, если у нас установлено где-то в реестре юзать защиту от выполнения данных, то, естественно, в хипе хер чего выполнишь, и возникнет #GP, и тут-то нам и придет на помощь KiCheckForAtlThunk =) Короче, ИМХО, вносить изменения в ядро, для того, чтобы нормально работала криво написанная юзермодная библиотека -- та еще жесть =) Все кто минусует -- не шарят :P

    ISith, 30 Января 2010

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