1. Список говнокодов пользователя defecate-plusplus

    Всего: 19

  2. C++ / Говнокод #12713

    +14

    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 base {
       template <class Foo>
    	base() {}
    };
    
    struct derived {
    	derived()
    		: base::base<int>()		// why not?? WHHYYYY?
    	{}
    };
    
    base b1 = base::base<int>();
    base b2<int>();

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

    defecate-plusplus, 09 Марта 2013

    Комментарии (13)
  3. PHP / Говнокод #11900

    +48

    1. 1
    2. 2
    3. 3
    PHP supports eight primitive types - four scalar types, two compound types and finally three special types.
    
    8 == 4+2+3?

    http://www.php.net/manual/en/language.types.intro.php

    defecate-plusplus, 09 Октября 2012

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

    +32

    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
    #include <iostream>
     
    void f(char c)          { std::cout << "f(char)" << std::endl; }
    void f(signed char c)   { std::cout << "f(signed char)" << std::endl; }
    void f(unsigned char c) { std::cout << "f(unsigned char)" << std::endl; }
     
    int main()
    {
            f('a');
            f((signed char)('a'));
            f((unsigned char)('a'));
            return 0;
    }

    илитный ресурс сегодня мне раскрыл глаза на очередное крестоблядство керниган-гай-ричи-блядство:
    с:
    The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.
    Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.
    с++:
    Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types.

    defecate-plusplus, 08 Октября 2012

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

    +42

    1. 1
    2. 2
    3. 3
    4. 4
    objbase.h:
    
    #define __STRUCT__ struct
    #define interface __STRUCT__

    спасибо Микрософт за счастливое детство соответствие стандарту при засирании глобального неймспейса своими больными фантазиями

    defecate-plusplus, 03 Октября 2012

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

    +19

    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
    // хелпер чтобы конвертить типы строк
    template <class S1, class S2>
    struct str_convert {
    	static S1 conv(S2 const & s2) { return str_convert<S2, S1>::conv(s2); }		// по умолчанию ищет специализацию для пары S2, S1
    	static S2 conv(S1 const & s1) { return str_convert<S2, S1>::conv(s1); }
    };
    
    // специализация, чтобы не конвертить одно в одно
    template <class S>
    struct str_convert<S, S> {
    	static S const & conv(S const & s) { return s; };
    };
    
    // специализация, чтобы конвертить std::string <-> std::wstring
    template <>
    struct str_convert<std::string, std::wstring> {
    	static std::string conv(std::wstring const & ws) { return boost::locale::conv::utf_to_utf<char>(ws); }
    	static std::wstring conv(std::string const & s)  { return boost::locale::conv::utf_to_utf<wchar_t>(s); }
    };
    
    // специализация QString <-> std::string
    // skipped
    
    template <class StringType = std::string>
    struct some 
    {
    	typedef StringType		string_type;
    	typedef std::string		utf8_string_type;
    
    	some(string_type const & s = string_type())
    		: inner_string_(s)
    	{}
    
    	template <class S>
    	some(S const & s)
    		: inner_string_(str_convert<S, string_type>::conv(s))
    	{}
    
    	string_type inner_string_;
    };
    
    int main()
    {
    	std::string s = "hello!";
    	some<> test0(s);		  // ok
    	some<> test2("hello!"); // ха-ха, вот еще, пытаться самостоятельно привести к std::string, пиши специализацию для массивов, сука!
    	return 0;
    }

    сегодня ради красоты передачи "literal" в конструктор писал говноспециализации для PodType[N]

    defecate-plusplus, 04 Июля 2012

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

    +137

    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 FMT_2_LEN  16
    #define FMT_4_LEN  24
    // и т.д. всего около десятка форматов
    
    void calc_check_code(const unsigned char * from, unsigned fmt, unsigned * code)
    {
        switch (fmt) {
        case 2:
            //...
            memset(data, 0, sizeof(FMT_2_LEN));
            // выборочное наполнение data из from
            make_code(data, FMT_2_LEN, code);
            break;
        case 4:
            //...
            memset(data, 0, sizeof(FMT_4_LEN));
            // выборочное наполнение data из from
            make_code(data, FMT_2_LEN, code);
            break;
        // для всех остальных аналогично
    }

    странно, и почему контрольный код не совпадает с эталонными примерами...

    defecate-plusplus, 20 Июня 2012

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

    −32

    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
    //
    //	std::string wrapper
    //
    namespace priv {
    	class string {
    		std::string &m_s;
    
    		std::string &(std::string::*m_pAssign1)( const char *, std::string::size_type );
    		std::string &(std::string::*m_pAssign2)( const char * );
    
    	public:
    		string( std::string &str ): m_s(str),
    			m_pAssign1(&std::string::assign), m_pAssign2(&std::string::assign) {}
    
    		string &assign( const char *s, std::string::size_type n )
    		{
    			(m_s.*m_pAssign1)( s, n ); return *this;
    		}
    		string &assign( const char *s )
    		{
    			(m_s.*m_pAssign2)( s ); return *this;
    		}
    	};
    }

    сегодня ассимилирую старый хлам на работе (проекты VC6) в студию с нормальными свойствами проектов, конфигурациями, неабсолютными путями и т.д.
    наткнулся в одной из либ на вот это

    defecate-plusplus, 30 Мая 2012

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

    +139

    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
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    j = 0;
    while (len >= 8)
    {
    	N[0] = N[0] ^ in[j++];
    	N[1] = N[1] ^ in[j++];
    
    	// first round
    	S = N[0];
    	N[0] = N[0] + k[0]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	S = N[0];
    	N[0] = N[0] + k[1]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	S = N[0];
    	N[0] = N[0] + k[2]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	/* skipped k[3] - k[6] */		
    
    	S = N[0];
    	N[0] = N[0] + k[7]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	// second round
    	S = N[0];
    	N[0] = N[0] + k[0]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	/* skipped */
    
    	S = N[0];
    	N[0] = N[0] + k[7]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	len = len - 8;
    };
    
    if (len > 0)
    {
    	for (i=0;i<len;i++)
    		((uint8 *)N)[i] = ((uint8 *)N)[i]^((uint8 *)&in[j])[i];
    
    	// first round
    	S = N[0];
    	N[0] = N[0] + k[0]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	/* skipped */
    
    	S = N[0];
    	N[0] = N[0] + k[7]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	// second round
    	S = N[0];
    	N[0] = N[0] + k[0]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    	/* skipped */
    
    	S = N[0];
    	N[0] = N[0] + k[7]; 
    	N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
    	N[0] = (N[0]<<11) | (N[0]>>21);
    	N[0] = N[0]^N[1];
    	N[1]=S;
    
    };

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

    defecate-plusplus, 20 Октября 2011

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

    +171

    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
    static void tm_to_systemtime(const tm* pTime, LPSYSTEMTIME pSysTime )
    {
    	time_t timeT = mktime((tm*)pTime);
    	FILETIME fTime = {0},lTime = {0};
    	LONGLONG ll = Int32x32To64(timeT, 10000000) + 116444736000000000;
    	fTime.dwLowDateTime = (DWORD) ll;
    	fTime.dwHighDateTime = ll >>32;
    	FileTimeToLocalFileTime(&fTime,&lTime);
    	FileTimeToSystemTime(&lTime,pSysTime);
    }
    
    static std::string GetDateTimeString(const tm& activ)
    {
    	SYSTEMTIME sysTime = {0};
    	tm_to_systemtime(&activ,&sysTime);
    	char str[256];
    	//format to <YYYYMMDDHHMMSS>
    	sprintf_s(str,sizeof(str),"%04d%02d%02d%02d%02d%02d",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour,sysTime.wMinute,sysTime.wSecond);
    	return std::string(str);
    }

    далеко не самый скучный способ отформатировать ::tm в виде YYYYMMDDHHmmss

    defecate-plusplus, 20 Сентября 2011

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