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

    +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
    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
    // https://habr.com/post/417027/
    // Как я стандартную библиотеку C++11 писал или почему boost такой страшный
    // https://github.com/oktonion/stdex/blob/1472fd5e2f5e0d10a136518631055c3aad2e1cfd/stdex/include/thread.hpp#L51
    
    
    		template<class R, class T1>
    		struct _function_traits<R(*)(T1)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T1 argument_type;
    		};
    
    		template<class R, class T1, class T2>
    		struct _function_traits<R(*)(T1, T2)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T2 arg2_type;
    			
    			
    		};
    
    		template<class R, class T1, class T2, class T3>
    		struct _function_traits<R(*)(T1, T2, T3)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T2 arg2_type;
    			typedef T3 arg3_type;
    		};
    
    		template<class R, class T1, class T2, class T3, class T4>
    		struct _function_traits<R(*)(T1, T2, T3, T4)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T2 arg2_type;
    			typedef T3 arg3_type;
    			typedef T4 arg4_type;
    		};
    
    		template<class R, class T1, class T2, class T3, class T4,
    			class T5>
    		struct _function_traits<R(*)(T1, T2, T3, T4, T5)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T2 arg2_type;
    			typedef T3 arg3_type;
    			typedef T4 arg4_type;
    			typedef T5 arg5_type;
    		};
    
    		template<class R, class T1, class T2, class T3, class T4,
    			class T5, class T6>
    		struct _function_traits<R(*)(T1, T2, T3, T4, T5, T6)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T2 arg2_type;
    			typedef T3 arg3_type;
    			typedef T4 arg4_type;
    			typedef T5 arg5_type;
    			typedef T6 arg6_type;
    		};
    
    		template<class R, class T1, class T2, class T3, class T4,
    			class T5, class T6, class T7>
    		struct _function_traits<R(*)(T1, T2, T3, T4, T5, T6, T7)>
    		{
    			typedef R result_type;
    			typedef T1 arg1_type;
    			typedef T2 arg2_type;
    			typedef T3 arg3_type;
    			typedef T4 arg4_type;
    			typedef T5 arg5_type;
    			typedef T6 arg6_type;
    			typedef T7 arg7_type;
    		};
    
    ...

    > На дворе был 2017 год! Уже C++ 17 активно вводился в GCC, clang, Visual Studio, везде был decltype (since C++ 11), constexpr (since C++ 11, но существенно доработан), модули уже почти на подходе, хорошее время было. Я же находился на работе и с некоторым неодобрением смотрел на очередной Internal Compiler Error в своем Borland C++ Builder 6.0, а так же на множество ошибок сборки с очередной версией библиотеки boost. Думаю, теперь вы понимаете, откуда взялась эта тяга к велосипедостроению. У нас использовался Borland C++ Builder 6.0 и Visual Studio 2010 под Windows, g++ версии 4.4.2 или ниже под QNX и под некоторые unix системы. От MacOS мы были избавлены, что несомненно было плюсом. Ни о каких других компиляторах (под C++ 11 в том числе) речи даже быть не могло по соображениям, которые мы оставим за пределами данной статьи.

    > «А что там может быть на столько сложного» — закралась мысль в мой измученный попытками завести boost под старый-добрый builder мозг. «Мне всего то нужно type_traits, thread, mutex, возможно chrono, nullptr было бы еще неплохо.» — рассудил я и принялся за работу.

    j123123, 13 Июля 2018

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

    0

    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
    static void MakeSubsets(char[] subset, int position = -1)
    {
    	/*if (position == subset.Length)
    	{
    		Console.WriteLine(new string(subset));
    		return;
    	}
    	subset[position] = 'a';
    	MakeSubsets(subset, position + 1);
    	subset[position] = 'b';
    	MakeSubsets(subset, position + 1);*/
    	
    	if(subset.Length == 0)
    	{
    		Console.WriteLine();
    		return;
    	}
    	
    	if(!(subset[0] >= 'a' && subset[0] <= 'z'))
    	{
    		for(int i = 0; i < subset.Length; ++i)
    			subset[i] = 'a';
    	}
    	
    	switch(subset.Length)
    	{
    		case 1:{ position = 0; }break;
    		default:{ position = position == -1 ? subset.Length - 2 : position; }break;
    	}
    	
    	Console.WriteLine(subset);
    	
    	//if(subset.Length <= 2)
    	//{
    	
    	if(subset[subset.Length - 1] + 1 != 'd')
    	{
    		++subset[subset.Length - 1];
    		MakeSubsets(subset,position);
    	}
    	else
    	{
    		switch(subset.Length)
    		{
    			case 1:
    				{
    					return;
    				}break;
    			default:
    				{
    					for(int i = position + 1; i < subset.Length; ++i)
    					{
    						subset[i] = 'a';
    					}
    					
    					if(subset[position] + 1 != 'd')
    					{
    						++subset[position];
    						MakeSubsets(subset,position);
    						return;
    					}
    					
    					bool bChange = false;
    					
    					while(true)
    					{
    						if(position < 0)
    						{
    							break;
    						}
    						if(subset[position] + 1 != 'd')
    						{
    							++subset[position];
    							bChange = true;
    							break;
    						}
    						subset[position] = 'a';
    						--position;
    					}
    					
    					if(bChange)
    					{
    						MakeSubsets(subset,-1);
    						return;
    					}
    					else
    						return;
    					
    				}break;
    		}
    	}
    	//}
    }
    //писал не индус

    Этот код выполняет ту же вещь(возвращает все комбинации с буквами a, b, c), что и этот код:


    static void MakeSubsets(char[] subset, int position = 0)
    {
    if (position == subset.Length)
    {
    Console.WriteLine(new string(subset));
    return;
    }
    for (char neww = 'a'; neww < 'd'; neww++)
    {
    subset[position] = neww;
    MakeSubsets(subset, position + 1);
    }
    }

    Verenick, 12 Июля 2018

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

    0

    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
    private void OutputLabels(DataTable dt)
    {
       string label; 
    
       // Iterate rows of table
       foreach (DataRow row in dt.Rows)
       {
          int labelLen;
          label = String.Empty;
          label += AddFieldValue(label, row, "Title");
          label += AddFieldValue(label, row, "FirstName");
          label += AddFieldValue(label, row, "MiddleInitial");
          label += AddFieldValue(label, row, "LastName");
          label += AddFieldValue(label, row, "Suffix");
          label += "\n";
          label += AddFieldValue(label, row, "Address1");
          label += AddFieldValue(label, row, "AptNo");
          label += "\n";
          labelLen = label.Length;
          label += AddFieldValue(label, row, "Address2");
          if (label.Length != labelLen)
             label += "\n";
          label += AddFieldValue(label, row, "City");
          label += AddFieldValue(label, row, "State");
          label += AddFieldValue(label, row, "Zip");
          Console.WriteLine(label);
          Console.WriteLine();
       }
    }
    
    private string AddFieldValue(string label, DataRow row, 
                                 string fieldName) 
    {                                
       if (! DBNull.Value.Equals(row[fieldName])) 
          return (string) row[fieldName] + " ";
       else
          return String.Empty;
    }

    label не используется в AddFieldValue. Официальный пример MS - https://docs.microsoft.com/en-us/dotnet/api/system.dbnull.value?view=netframework-4.7.2

    gogishvilli001, 12 Июля 2018

    Комментарии (90)
  4. Assembler / Говнокод #24481

    −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
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    ; минимальная .COM программа, которую я смог высрать в ascii
    ; генерит ret и передаёт на него управление
    ; пробел (and r/m8, reg) я тоже не использовал
    ; писалась в hex-кодах
    
    push 314ah
    pop ax
    xor ax, 3070h
    push ax
    pop bx
    pop ax
    push ax
    xor ah, [bx]
    sub [bx], ah
    pop ax
    push ax
    dec ax
    xor ax, 3c3ch
    xor bx, ah
    jnz 013ah

    hJ1X5p0P[XP2'('XPH5<<0'u!
    Мой малинькый скукожоный моск очинь долго мучился, прежде чем родить это. Так что, не судити строго. :)

    666_N33D135, 11 Июля 2018

    Комментарии (105)
  5. Куча / Говнокод #24480

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // Making Wrong Code Look Wrong
    // by Joel Spolsky
    // https://www.joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong/
    
    us = UsRequest("name")
    usName = us
    recordset("usName") = usName
    sName = SFromUs(recordset("usName"))
    WriteS sName

    В упомянутой роскомговном статье «Making Wrong Code Look Wrong» Спольски упоминает венгерскую нотацию, как способ to make wrong code look wrong.
    Я хотел бы обсудить ЯП, в котором поверх (допустим, динамической) системы типов есть некоторый набор правил, основанный на Apps Hungarian. У переменных и функций сравниваются префиксы, и язык не даёт тебе присвоить количество мух в переменную, которая хранит количество слонов, хотя и то и то — int. Если же ты знаешь, что делаешь, можно использовать функции вида <prefix>From<suffix> и <prefix>To<suffix>, причем во избежание бойлерплейта, можно положить все такие функции существующими и тривиальными (возвращающими входное значение), если не определено другое.

    Что хорошего и плохого было бы в таком языке? Дискасс.

    vistefan, 11 Июля 2018

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

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    while (reconnect)
    {
        ...
        reconnect = false;
        ...
    }

    gogishvilli001, 11 Июля 2018

    Комментарии (1)
  7. Куча / Говнокод #24475

    −4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    До чего докатился интернет.
    Вместо того, чтобы сделать запрос к какому-то сайту с минимальным
    временем отклика, мы "связываемся" с неким компом, который физически
    находится где-то за океаном, тот в свою очередь через своего америкосского
    провайдера обращается к нашему сайту, и отправляем нам результат.
    Ну не пиздец ли?

    Какой багор )))

    guestinxo, 10 Июля 2018

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

    0

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <inttypes.h>
    
    void test1(void)
    {
      printf("test1\n");
    }
    void test2(void)
    {
      printf("test2\n");
    }
    void test3(void)
    {
      printf("test3\n");
    }
    void test4(void)
    {
      printf("test4\n");
    }
    
    uint8_t func_dist[3] = {(uint8_t)((char *)test2-(char *)test1), (uint8_t)((char *)test3-(char *)test2), (uint8_t)((char *)test4-(char *)test3)};
    
    void callf(uint8_t fn)
    {
      size_t sum_dis = 0;
      for (uint8_t i = 0; i < fn; i++)
      {
        sum_dis += func_dist[i];
      }
      ( (void(*)(void)) ((char *)test1+sum_dis) )  ();
    }
    
    int main(void)
    {
      callf(0);
      callf(1);
      callf(2);
      callf(3);
      return EXIT_SUCCESS;
    }

    Зожатие указателей. Главное чтоб длины функций не превышали 255 и чтоб функции шли строго подряд, как они объявлены кода
    Как сделать чтобы это компилировалось сишкой?

    j123123, 10 Июля 2018

    Комментарии (12)
  9. 1C / Говнокод #24465

    +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
    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
    ВЫБРАТЬ
    	ПоступлениеТоваровУслуг.Ссылка,
    	ПоступлениеТоваровУслуг.Дата,
    	ПоступлениеТоваровУслуг.Контрагент,
    	ПоступлениеТоваровУслуг.Организация,
    	ДополнительныеСведения.Значение КАК ДатаВозврата
    ПОМЕСТИТЬ втДокументы
    ИЗ
    	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    		ПО ПоступлениеТоваровУслуг.Ссылка = ДополнительныеСведения.Объект
    ГДЕ
    	ДополнительныеСведения.Значение ЕСТЬ NULL
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
    	ПоступлениеУслугПрочихАктивов.Ссылка,
    	ПоступлениеУслугПрочихАктивов.Дата,
    	ПоступлениеУслугПрочихАктивов.Контрагент,
    	ПоступлениеУслугПрочихАктивов.Организация,
    	ДополнительныеСведения.Значение
    ИЗ
    	Документ.ПоступлениеУслугПрочихАктивов КАК ПоступлениеУслугПрочихАктивов
    		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    		ПО ПоступлениеУслугПрочихАктивов.Ссылка = ДополнительныеСведения.Объект
    ГДЕ
    	ДополнительныеСведения.Значение ЕСТЬ NULL
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    	втДокументы.Ссылка КАК Ссылка,
    	втДокументы.Дата КАК Дата,
    	втДокументы.Контрагент,
    	втДокументы.Организация,
    	втДокументы.ДатаВозврата
    ИЗ
    	втДокументы КАК втДокументы
    ГДЕ
    	втДокументы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    	И втДокументы.Ссылка.Проведен
    	И втДокументы.ДатаВозврата ЕСТЬ NULL
    {ГДЕ
    	втДокументы.Контрагент.*,
    	втДокументы.Организация.*}
    
    УПОРЯДОЧИТЬ ПО
    	Дата,
    	Ссылка

    Охуительная оптимизация запроса временными таблицами, а ведь на первый взгляд даже не говнокод

    ChoaNyan, 10 Июля 2018

    Комментарии (1)
  10. Python / Говнокод #24464

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    import re
    
    brabrebrized = lambda s, repl = r"бр\1": (
        re.sub(
            "[йцкнгшщзхъфвпрлджчсмтьб]+([аеёиоуыэюя])",
            repl,
            s,
            flags = re.IGNORECASE
        )
    )

    Я ебрабрубря и брабрибрал брабрибраброр бребров. брибрер:
    брибрит брёбра бра брабробре,
    бробрит ябра в абребробре.
    брибрия! брибрия!
    бря брабрубра брибряя!

    666_N33D135, 09 Июля 2018

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