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

    +144

    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
    #include <stdio.h>
    
    // Говнокод здесь
    #define ABS(x) ((x) ? (x) : (-(x)))
    
    int main () {
    	char ch = -128;
    	short sm = -32768;
    	int i = -2147483647; i--;                                    // здесь
    	long long l = -9223372036854775807LL; l--; // и здесь декременты нужны
    	                                                                             // для подавления варнингов
    	
    	printf("char:\t\tABS(%hhd) = %hhd\n", ch, ABS(ch));
    	printf("short:\t\tABS(%hd) = %hd\n", sh, ABS(sh));
    	printf("int:\t\tABS(%d) = %d\n", i, ABS(i));
    	printf("long long:\tABS(%lld) = %lld\n", l, ABS(l));
    
    	return 0;
    }

    Может быть, баян, но...
    Всем знакомый макрос ABS способен сделать большую гадость.
    Вот вывод программы:
    char: ABS(-128) = -128
    short: ABS(-32768) = -32768
    int: ABS(-2147483648) = -2147483648
    long long: ABS(-9223372036854775808) = -9223372036854775808

    whiskey, 12 Ноября 2010

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

    +146

    1. 1
    2. 2
    3. 3
    4. 4
    logit("e", "%s No Menu! Wait 5 minutes and try again.\n", whoami);
    for(j=0;j<60;j++) {
        sleep_ew( 5000 );       /* wait around */
    }

    sgram из earthworm

    ftptrash, 08 Ноября 2010

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

    +144

    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
    main() {
        char * what = "\
            ........................................ ....________\
            ....................................,.-'\"...................``~.,\
            .............................,.-\"................................... \"-.,\
            .........................,/........................................ .......\":,\
            .....................,?................. .....................................,\
            .................../........................................ ...................,}\
            ................./........................................ ..............,:`^`..}\
            .............../........................................ ...........,:\"........./\
            ..............?.....__.................. .......................:.........../\
            ............./__.(.....\"~-,_..............................,:..... ...../\
            .........../(_....\"~,_........\"~,_.................. ..,:........_/\
            ..........{.._$;_......\"=,_.......\"-,_.......,.-~-,},.~\";/....}\
            ...........((.....*~_.......\"=-._......\";,,./`..../\"............../\
            ...,,,___.`~,......\"~.,................. ...`.....}............../\
            ............(....`=-,,.......`........................(..... .;_,,-\"\
            ............/.`~,......`-...................................../\
            .............`~.*-,.....................................|, ./.....,__\
            ,,_..........}.>-._...................................|.. ............`=~-,\
            .....`=~-,__......`,............................. ....\
            ...................`=~-,,.,...............................\
            ................................`:,,.... .......................`..............__\
            .....................................`=-,...................,%`>--==``\
            ........................................ _..........._,-%.......`\
            ...................................,";
    
        int c = 0; int i = 0;
        for(; i < strlen(what); i++) {
            switch(what[i]) {
                case '.': c++;break;
                case '_': c--;break;
                case '/': c *= 2; break;
                case ',': c /= 2; break;
                case '?': c <<= 1; break;
                case '"': c >>= 1; break;
                case ':': c = ~c; break;
                case '*': c = -c; break;
                case '`': c += 100500; break;
                case '{': c -= '{'; break;
                case '}': c += '}'; break;
                case '-': c /= 4; break;
                case '~': c <<= 4; break;
                case ';': c = c & -c; break;
                case '%': c = c & 0xFF; break;
                case '=': c = c; /* еба! */ break;
                case '^': c = c ^ -c; break;
                case '$': printf("BINGOOO!!!\n"); break;
            }
        }
    
        printf("FACEPALM RESULT: %i\n", c);

    BINGOOO!!!
    FACEPALM RESULT: 50301

    danilissimus, 06 Ноября 2010

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

    +106

    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
    // процедура ввода новой даты в RTC
    long __new_date()
    	{
    	date sysdate;
    	unsigned long str,i;
    	unsigned char tmpbuf[16];
    
    // ...
    
    nextda:	__putsV("\n\rВведите новую дату: ");
    	__getsV(tmpbuf,10); 
    	if(tmpbuf[0]==0) goto daok;
    	//проверка строки на допустимые символы '0'-'9' и '.'
    	for(i=0; tmpbuf[i]!=0; i++)
    	 { if((tmpbuf[i]>0x39 || tmpbuf[i]<0x30) && tmpbuf[i]!=0x2e) goto baddat;
    	 }
    	//проверка числа в диапазоне 01-31
    	if(((tmpbuf[0]==0x33)&&(tmpbuf[1]>0x31)) || (tmpbuf[0]>0x33) 
    		|| (tmpbuf[1]==0x2e) || ((tmpbuf[0]==0x30)&&(tmpbuf[1]==0x30)) ) goto baddat;
    	//проверка точки после числа
    	if((tmpbuf[2]!=0x2e) && (tmpbuf[2]!=0x0)) goto baddat; 
    	if((tmpbuf[2]==0x0) || (tmpbuf[3]==0x00)) 
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  goto fordok; }
    	//проверка месяца в диапазоне 01-12
    	if(((tmpbuf[3]==0x31)&&(tmpbuf[4]>0x32)) || (tmpbuf[3]>0x31) 
    		|| (tmpbuf[4]==0x2e) || ((tmpbuf[3]==0x30)&&(tmpbuf[4]==0x30)) ) goto baddat;
    	//проверка точки после месяца
    	if((tmpbuf[5]!=0x2e) && (tmpbuf[5]!=0x0)) goto baddat; 
    	if((tmpbuf[5]==0x0) || (tmpbuf[6]==0x00)) 
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4); 
    		  goto fordok; }
    	//проверка года в диапазоне 00-99
    	if((tmpbuf[6]==0x2e) || (tmpbuf[7]==0x2e)) goto baddat;
    	if(tmpbuf[7]==0x00) goto baddat; 
    	if(tmpbuf[8]==0x0)  
    		{ sysdate.ti_date=(tmpbuf[1]-0x30)+((tmpbuf[0]-0x30)<<4);
    		  sysdate.ti_month=(tmpbuf[4]-0x30)+((tmpbuf[3]-0x30)<<4); 
    		  sysdate.ti_year=(tmpbuf[7]-0x30)+((tmpbuf[6]-0x30)<<4); 
    		  goto fordok; }
    baddat:	__putsV("\n\rДата введена неверно (дд.мм.гг)");
    	goto nextda;
    	//установка новой даты
    fordok: 
    	__set_date(&sysdate);
    daok: 
       return 0;
    	}

    Из ПО отечественного шифродевайса. Функция получает от "оператора" время (дд.мм.гг), проверяет его на корректность и пишет в Real Time Clock.

    greyspy, 03 Ноября 2010

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

    +109

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    /*
    * The dump header describes the contents of a crash dump.  Two headers
    * are written out: one at the beginning of the dump, and the other at
    * the very end of the dump device.  The terminal header is at a known
    * location (end of device) so we can always find it.  The initial header
    * is redundant, but helps savecore(1M) determine whether the dump has been
    * overwritten by swap activity.  See dumpadm(1M) for dump configuration.
    */
    #define	DUMP_MAGIC	0xdefec8edU		/* dump magic number */

    вот такая сигнатура у крэшдампа соляриса

    bugmenot, 02 Ноября 2010

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

    −34

    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
    #define _ F-->00 || F-OO--;
    long F=00,OO=00;
    main(){F_OO();printf("%1.3f\n", 4.*-F/OO/OO);}F_OO()
    {
                _-_-_-_
           _-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_-_-_-_-_
      _-_-_-_-_-_-_-_-_-_-_-_-_-_
     _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
     _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
     _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
     _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
      _-_-_-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_-_-_-_-_
           _-_-_-_-_-_-_-_-_
                _-_-_-_
    }

    так расчитывается число пи. я не мог этого не запостить.

    3.14159265, 01 Ноября 2010

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

    +105

    1. 1
    2. 2
    3. 3
    int run_zero[] = {0xfffffffe,0xfffffffd,0xfffffffb,0xfffffff7,0xffffffef,0xffffffdf,0xffffffbf,0xffffff7f,0xfffffeff,0xfffffdff,0xfffffbff,0xfffff7ff,0xfffefff,0xffffdfff,0xffffbfff,0xffff7fff,0xfffeffff,0xfffdffff,0xfffbffff,0xfff7ffff,0xffeffff,0xffdfffff,0xffbfffff,0xff7fffff,0xfeffffff,0xfdffffff,0xfbffffff,0xf7ffffff,0xefffffff,0xdfffffff,0xbfffffff,0x7fffffff};
    int run_one[] = {0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000,0x8000,0x10000,0x20000,0x40000,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0x10000000,0x20000000,0x40000000,0x80000000};
    int chess_code[] = {0xa5,0x5a};

    Первые строки теста регистров некоего контроллера. Хорошо, что регистры не 64-разрядные, а то задолбался бы паренёк. А уж про chess_code вообще молчу. Вот так суровые российские программеры, не боящиеся лишней работы, тестируют авиационное бортовое оборудование.

    whiskey, 01 Ноября 2010

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

    +141

    1. 1
    sprintf(name," %s", trim("рубль",0));

    Функция trim(char*, int), где вторым параметром указывается с какой стороны удалять пробелы(0 - с обеих сторон)

    wolf, 26 Октября 2010

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

    +127

    1. 1
    (&goodsBuff[k].name==&vmass[p].name)

    Сравнение строк

    GrayCardinal, 25 Октября 2010

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

    +135

    1. 1
    2. 2
    3. 3
    do {
                     data = get_stat();
            } while ((data & (1 << stat_smth_ok_bit_n)) != (1 << stat_smth_ok_bit_n));

    Суровый педантичный немецкий код.

    minixoid, 22 Октября 2010

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