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

    +163

    1. 1
    throw new TSilentException("");

    Говногость, 08 Февраля 2011

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

    +149

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    struct SomeData 
    {
        ...
        double balls;
        ....
    }

    Interfere, 08 Февраля 2011

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

    +180

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    ...
    #define EXT12 	//Не комментировать эту директиву. Иначе не работает.
    ...
    #define EXT34 	//Эта директива почти не используется. Может перерефакторим без неё?
    		//Ну убирай.
    		//Давай ты.
    		//Там есть пару мест, где она используется. Поэтому я не хочу.
    		//Но ведь нужно. Эти директивы можно заменить на полиморфизм классов.
    		//Ну займись. Я не хочу. Вдруг сломается.
    ...

    У нас 2 человека работают над одной веткой проекта на С++. Люди работают в отделах на разных этажах (один на этаж выше другого). Им лень сходить друг к другу или поговорить по жаберу. Я уже как полгода наблюдаю за картиной: они переговариваются через комментарии в коде через систему контроля версий. Я не против переговоров в системе контроля версий, но они уже месяц осбуждают EXT34, а так ничего с ним и не сделали. Хоть бы комментарии удалили, если делать ничего не собираюются. Может с них 0.125 премии снять?
    Как-нибудь ещё переговоры повеселее выложу.

    Говногость, 08 Февраля 2011

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

    +160

    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
    QString convToHex( unsigned char *bytes, int size )
    {
    	if( size > 16 )
    		size = 16;
    	QString ret;
    	for( int i = 0; i < size; i++ )
    	{
    		char buf[64];
    		::snprintf( buf, sizeof(buf), "%02x", (unsigned int) bytes[i] );
    		ret += buf;
    	}	
    	return ret;
    }
    
    QString TarCreator::generateGuid( const std::string &tDeviceSerial,
    		const std::string &nDatetime, unsigned long long int id )
    {
    	std::ostringstream s;
    	s << tDeviceSerial;
    	s << nDatetime;
    	s << id;
    	
    	QCryptographicHash hash( QCryptographicHash::Md5 );
    	hash.addData( QByteArray( s.str().c_str() ) );
    	QByteArray result = hash.result();
    	return convToHex( (unsigned char*)result.data(), result.size() );
    }

    panter_dsd, 08 Февраля 2011

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

    +160

    1. 1
    2. 2
    3. 3
    4. 4
    void IRQHandler(void)
    {
    ...
    WaitSemaphore(semH);

    Из кода для встроенного устройства реального времени.

    Говногость, 08 Февраля 2011

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

    +164

    1. 1
    i = j ? k : l = m;

    опять же с форума wasm.ru... пол дня объяснял почему с++ компилятор трактует это выражение как i = j ? k : (l = m), а никак по-другому... не пишите такую чушь никогда)

    ReL, 07 Февраля 2011

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

    +166

    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
    // 0. original version:
    struct Subscriber {
    	ServiceConfig *services;
    };
    
    struct ServiceConfig {
    };
    
    // reported problem: as per doc, Customer may have multiple service configurations, yet we can configure only one.
    
    // 1. next "fixed" version, as delivered to the customer:
    struct Subscriber {
    };
    
    struct ServiceConfig {
    	Subscriber *subs;
    };
    
    // ticket reopened: wtf. changing services for one customer, affects others!!
    
    // 2. next "fixed" version, as delivered to the customer:
    struct Subscriber {
    	ServiceConfig *services;
    };
    
    struct ServiceConfig {
    };
    
    // ticket reopened: @#$%^& [*BEEP*] @#$%^& [*BEEP*] @#$%^&*
    
    // 3. finally:
    struct Subscriber {
    };
    
    struct ServiceConfig {
    };
    
    struct SubscriberServiceConfig {
    	Subscriber *subs;
    	ServiceConfig *services;
    };

    если бы лично не лицезрел эту переписку (навечно задокументированую в аналах вершн контрол) между нашими разработчиками и консультантами работающими на инсталяции у кастомера, нивжисть бы не поверил что такое даже может иметь место.

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

    Dummy00001, 07 Февраля 2011

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

    +178

    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
    struct rt_asserter_t {
    	string func_;
    	rt_asserter_t( string func ): func_(func){};
    	void operator  = (bool condition) {
    		if( condition == true ) {
    			;;;
    		} else if (condition == false) {
    			throw new rt_assert_ex(func_);			
    		} else {
    			throw new unknown_ex(func_);
    		}
    	} 
    };

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

    ossa, 05 Февраля 2011

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

    +159

    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
    try
    {
      for(..)
      {
         for(..)
         {
            if(...)
               throw;//генерация исключения
         }
      }
    }
    catch(..)
    {
    }

    Кому-то религия не позволяет юзать goto. Сорри, если было.

    CHayT, 05 Февраля 2011

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

    +164

    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
    if ((AnalysisType == 0) || (!m_UseExtraInfo)) {
    	o1 = o2 = -1;
    	do {
    		fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
    		if ((Buf[0] == 0xFF) || ((Buf[0] == 0x7F) && (AnalysisType == 0))) {
    			o2 = o1; o1--; FFcnt = 1;
    			do {
    				fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
    				if ((Buf[0] == 0xFF) || ((Buf[0] == 0x7F) && (AnalysisType == 0)))
    					FFcnt++;
    				o1--;
    			}
    			while ((Buf[0] == 0xFF) || ((Buf[0] == 0x7F) && (AnalysisType == 0)));
    			if ((FFcnt == 71) || (FFcnt == 73)) PosTavern = o2;
    			if ((PosCheater == -1) && (FFcnt > 50)) {
    				PosCheater = o2; fseek(F, o2, SEEK_END);
    				do {
    					Buf[0] = fgetc(F);
    					if (Buf[0] != 0x00) PosCheater++;
    				}
    				while (Buf[0] != 0x00);
    			}
    		}
    		else o1--;
    	}	
    	while ((o1 > -sz) &&
    		   (((AnalysisType == 1) && (PosTavern ==  -1)) ||
    		    ((AnalysisType == 0) && (PosCheater == -1))));
    }
    else {
    	o1 = o2 = -200;
    	oFFcnt = -1;
    	do {
    		fseek(F, o1, SEEK_END);
    		Buf[0] = fgetc(F); Buf[1] = fgetc(F);
    		if ((Buf[0] == HL) && (Buf[1] == HR)) {
    			o2 = o1 + 86;
    			FFcnt = 0;
    			do {
    				fseek(F, o2, SEEK_END);
    				Buf[0] = fgetc(F);
    				if (Buf[0] == 0xFF) {
    					FFcnt++; o2--;
    				}
    			}
    			while (Buf[0] == 0xFF);
    			if ((oFFcnt == -1) || (abs(72 - FFcnt) < abs(72 - oFFcnt))) {
    				PosTavern = o1; oFFcnt = FFcnt;
    			}
    		}
    		o1--;
    	}
    	while (o1 > -sz);
    	if (PosTavern != -1)
    		PosTavern = PosTavern + 86 + 0x91 * (7 - PN);
    
    	if (m_ChangeHeroes && ((HL_new >= 0) || (HR_new >= 0))) {
    		o1 = o2 = -1;
    		do {
    			fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
    			if ((Buf[0] == 0xFF) || (Buf[0] == 0x7F)) {
    				o2 = o1; o1--; FFcnt = 1;
    				do {
    					fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
    					if ((Buf[0] == 0xFF) || (Buf[0] == 0x7F)) FFcnt++;
    					o1--;
    				}
    				while ((Buf[0] == 0xFF) || (Buf[0] == 0x7F));
    				if (FFcnt > 50) {
    					PosCheater = o2; fseek(F, o2, SEEK_END);
    					do {
    						Buf[0] = fgetc(F);
    						if (Buf[0] != 0x00) PosCheater++;
    					}
    					while (Buf[0] != 0x00);
    				}
    			}
    			else o1--;
    		}	
    		while ((o1 > -sz) && (PosCheater == -1));
    	}
    }

    Кустарно-мистический анализатор сейвов для Героев 3.
    Так я писал пять с половиной лет назад...

    Kirinyale, 05 Февраля 2011

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