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

    Всего: 338

  2. Objective C / Говнокод #24721

    +1

    1. 1
    2. 2
    3. 3
    https://pbs.twimg.com/media/Dl4x_P-XsAAPfgC.jpg
    
    https://twitter.com/_inside/status/1035319938641276928 The Apple Watch pride face is hardcoded to not show up if the paired iPhone is using the Russian locale

    > Однако 30 октября 2014 года в статье на Bloomberg Businessweek Кук совершил каминг-аут, признавшись в своей гомосексуальности, и выразил надежду, что это признание поможет другим геям принять себя и вдохновит их на борьбу за свои права.

    Бабло победило принципы

    j123123, 05 Сентября 2018

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

    −4

    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
    https://docs.microsoft.com/en-us/windows/desktop/api/winsock/nf-winsock-wsaasyncselect
    int WSAAsyncSelect(
      SOCKET s,
      HWND   hWnd,
      u_int  wMsg,
      long   lEvent
    );
    
    /*
    
    hWnd
    
    A handle that identifies the window that will receive a message when a network event occurs.
    */

    Почему виндовые асинхронные (или правильно говорить "небликирующиеся") сокеты так черезжопно сделаны? Нафига им через HWND надо месседжи слать? Что, другого способа нет для оповещений?
    Требовать для работы асинхронных сокетов чтоб какое-то окно было это как требовать зубную щетку для входа в туалет чтоб посрать

    j123123, 24 Августа 2018

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

    +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
    http://faqs.org.ru/progr/c_cpp/cfaqrus.htm
    
    1.14:   Ну а если честно, на какой-нибудь реальной машине используются
            ненулевые внутренние представления нулевых указателей или разные
            представления для указателей разных типов?
    
    О:	Серия Prime 50 использует сегмент 07777, смещение 0 для	нулевого
            указателя, по крайней мере, для PL/I. Более поздние модели используют
            сегмент 0, смещение 0 для нулевых указателей С, что делает
            необходимыми новые инструкции, такие как TCNP (проверить нулевой
            указатель С), которые вводятся для совместимости с уцелевшими
            скверно написанными С программами, основанными на неверных
            предположениях. Старые машины Prime с адресацией слов были печально
            знамениты тем, что указатели на байты (char *) у них были большего
            размера, чем указатели на слова (int *).
    
            Серия Eclipse MV корпорации Data General имеет три аппаратно
            поддерживаемых типа указателей (указатели на слово, байт и бит), два
    	из которых - char * и void * используются компиляторами	С. Указатель
    	word * используется во всех других случаях.
    
    	Некоторые центральные процессоры Honeywell-Bull	используют код 06000
    	для внутреннего	представления нулевых указателей.
    
    	Серия CDC Cyber	180 использует 48-битные указатели, состоящие из
            кольца (ring), сегмента и смещения. Большинство пользователей
    	(в кольце 11) имеют в качестве нулевых указателей код 0xB00000000000.
    
    	Символическая Лисп-машина с теговой архитектурой даже не имеет
    	общеупотребительных указателей;	она использует пару <NIL,0> (вообще
            говоря, несуществующий <объект, смещение> хендл) как нулевой
            указатель С.
    
            В зависимости от модели памяти, процессоры 80*86 (PC) могут
            использовать либо 16-битные указатели на данные и 32-битные указатели
            на функции,  либо, наоборот, 32-битные указатели на данные и 16-битные
            - на функции.
    
    	Старые модели HP 3000 используют различные схемы адресации для байтов
            и для слов. Указатели на char и на void, имеют, следовательно,
            другое представление, чем указатели на int (на структуры и т.п.),
    	даже если адрес	одинаков.

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

    Делать специальную инструкцию в процессоре для криво написанного сишного кода. Какой багор!

    j123123, 01 Августа 2018

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

    +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
    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
    http://faqs.org.ru/progr/c_cpp/watcom_c.htm
    
                    WATCOM C/C++ FAQ
    
                       version 3.0
                       29 Aug 1998
    
            compiled by Lenik Terenin, 2:5061/1
    
    Maintained by Cyril Pertsev, 2:5020/1415.1
    Please send your additions and suggestions to the above address.
    
    Для удобства потpебления данного текста
    добавления выделены символом квотинга
    
    ...
    
    > Q: Гpафическая библиотека ваткома отказывается пеpеключать pежимы/банки
    > или делает это кpиво
    
    >A: В результате ковыряния в библиотеке выяснилось, что криворукие
    >ваткомовцы
    >совершенно не задумываются ни о какой переносимости и универсальности их
    >библиотек. В результате, если видео-карта имеет в биосе прошитое имя
    >производителя или другую информацию о нем, то для нее будет вызываться
    >вместо
    >функции переключения банков через VESA, другая функция, работающая с
    >картой
    >напрямую (иногда даже через порты).
    >Единственная проблема, что у каждого производителя (ATI, в моем случае),
    >рано
    >или поздно выходят новые и продвинутые карты, раскладка портов в которых
    >может
    >отличаться от той, которая использовалась в старых моделях. В результате,
    >все
    >это свинство начинает глючить и иногда даже виснуть.
    >После того, как я руками заткнул ему возможность использовать "родные"
    >фишки
    >для конкретной карты и прописал пользоваться только VESA -- все работает
    >как из
    >пушки ;))
    >Как затыкать -- а просто, есть переменная: _SVGAType, которую я
    >описывается
    >следующим образом: "extern "C" int _SVGAType;", и потом _перед_ (важно!)
    >вызовом _setvideomode нужно сказать "_SVGAType = 1;".

    Люблю читать несвежие FAQ.

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

    j123123, 31 Июля 2018

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

    +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
    copy(v) char *v; {	/* copy ctokn to v */
    	char *p;
    
    	p=ctokn;
    	while( *v++ = *p++ );
    	}
    
    compare(v) char *v; {	/* compare ctokn with v */
    	char *p;
    
    	for( p=ctokn; ; ++p ){
    		if( *p != *v++ ) return( 0 );
    		if( *p == 0 ) return(1);
    		}
    	}
    
    int *yalloc(n){ /* allocate n+1 words from vector mem */
    	int *omem;
    	omem = mem;
    	mem =+ n+1;
    	if(mem-mem0 >= memsiz) error("memory overflow");
    	return(omem);
    	}
    
    aryfil( v, n, c ) int *v,n,c; { /* set elements 0 through n-1 to c */
      int i;
      for( i=0; i<n; ++i ) v[i] = c;
      }
    
    union( a, b, c ) int *a, *b, *c; {
      /* set a to the union of b and c */
      /* a may equal b */
      /* return 1 if c is not a subset of b, 0 otherwise */
    
      _REGISTER int i, x, sub;
    
      sub = 0;
      for( i=0; i<tbitset; ++i ){
        x = b[i] | c[i];
        if( x != b[i] ) sub=1;
        a[i] = x;
        }
      return( sub );
      }
    
    prlook( pp ) int *pp;{
    	int j;
    	pp = pp->lset;
    	if( pp == 0 ) printf("\tNULL");
    	else {
    		printf(" { " );
    		for( j=1; j<=nterms; ++j ){
    			if( (pp[j>>4]>>(j&017) )&01 != 0 ) printf( "%s ", symnam(j) );
    			}
    		printf( "}" );
    		}
    	}

    https://github.com/eunuchs/unix-archive/blob/master/PDP-11/Trees/V6/usr/source/yacc/source/y1.c

    https://www.tuhs.org//Archive/Distributions/Research/Dennis_v6/v6src.tar.gz

    Для любителей обмазываться несвежим сишкокодом. Research Unix

    j123123, 28 Июля 2018

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

    +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
    // Non-constant constant-expressions in C++
    // http://b.atch.se/posts/non-constant-constant-expressions/
    // The Implementation
    
    constexpr int flag (int);
    
    template<class Tag>
    struct writer {
      friend constexpr int flag (Tag) {
        return 0;
      }
    };
    
    template<bool B, class Tag = int>
    struct dependent_writer : writer<Tag> { };
    
    template<
      bool B = noexcept (flag (0)),
      int    =   sizeof (dependent_writer<B>)
    >
    constexpr int f () {
      return B;
    }
    
    int main () {
      constexpr int a = f ();
      constexpr int b = f ();
    
      static_assert (a != b, "fail");
    }

    Note: clang incorrectly shows the wrong behavior, a workaround is available in the appendix.

    j123123, 26 Июля 2018

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

    −3

    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
    // https://github.com/Qqwy/raii_with/blob/74e4c66a821fba6a483d62a8c583b3fab06e3443/raii/raii.h#L60
    
    /**
     * Custom Control Structure Macro to provide Resource Acquisition Is Initialization (and Resource Relinquishment is Destruction).
     *
     * Use this to run a block of code with `var_decl` initialized to `init`, where at the end of the block (or at an earlier `safe_return`),
     * the passed `destr`-function will automatically be called with the given resource.
     *
     * Gotcha's:
     * 1. Do not use `return` from within `raii_with`, but only `safe_return`, because otherwise the destructors will not be run.
     * 2. Do not perform pointer-swaps with `var_decl`; the destructor will still be run on the original structure, because `raii` keeps its own reference to the resource.
     */
    #define raii_with(var_decl, init, destr)                                \
      while(1) /* i.c.m. break on l.4, so we can jump past the user-supplied block */ \
        if(0)                                                               \
        raii_glue(__raii_with_finished, __LINE__):                              \
          break;                                                            \
        else                                                                \
          /* initialize _tmp lifetime list elem so replacement `raii_lifetime_list` can have previous one as tail. */ \
          for(struct raii_lifetime_list_t _tmp = {.elem.resource = init, .elem.destructor = destr, .next = raii_lifetime_list};;) \
            /* initialize user-supplied variable name */                    \
            for(var_decl = _tmp.elem.resource;;)                            \
              if (1) {                                                      \
                /* Fill `_tmp`'s tail before `raii_lifetime_list` is shadowed */ \
                _tmp.next = raii_lifetime_list;                             \
                goto raii_glue(__raii_with_setup, __LINE__);                    \
              } else                                                        \
              raii_glue(__raii_with_setup, __LINE__):                           \
                /* Shadow `raii_lifetime_list` with inner version */        \
                for(struct raii_lifetime_list_t *raii_lifetime_list = &_tmp;;) \
                  if(1){                                                    \
                    goto raii_glue(__raii_with_body, __LINE__);                 \
                  } else                                                    \
                    while (1) /* so break works as expected */              \
                      while (1) /*so continue works as expected */          \
                        if (1){                                             \
                          /*after the else-block (or break or continue), destruct and finish */ \
                          destruct_raii_lifetime(raii_lifetime_list->elem); \
                          goto raii_glue(__raii_with_finished, __LINE__);       \
                        } else                                              \
                        raii_glue(__raii_with_body, __LINE__):
    
    
    #endif // RAII_WITH_H

    raii

    A simple library to provide RAII in standard-compliant C99, using raii_with(resource, initializer, destructor) { ... }-syntax:

    j123123, 19 Июля 2018

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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    // https://habr.com/company/JetBrains/blog/249479/
    
    Привет, Хабр!
    
    Некоторое время назад мы объявили конкурс — требовалось продолжить фразу:
    Бьёрн Страуструп создал С++ 36 лет назад, и он до сих пор востребован и пользуется популярностью у разработчиков, потому что...
    
    Спасибо всем участникам за массу положительных эмоций и разнообразные предположения о том, что же сделало C++ таким популярным.

    Посовещавшись, мы выбрали топ-6 ответов:

    j123123, 16 Июля 2018

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

    +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
    void sort3(uint32_t a[static 3])
    {
      //                   0     1     2     3     4     5     6     7     8
      uint32_t tmp[9] = {a[0], a[1], a[2], a[0], a[1], a[0], a[2], a[1], a[0]};
      uint8_t bits = (a[0] <= a[1]) | ((a[1] <= a[2]) << 1) | ((a[0] <= a[2]) << 2);
      static const uint8_t b[] =
      {
        [0b000] = 6,
        [0b001] = 2,
        [0b010] = 1,
        [0b101] = 5,
        [0b110] = 4,
        [0b111] = 0,
      };
      memcpy(a, tmp+b[bits], 3*sizeof(uint32_t));
    }

    Новая инновационная сортировка на 3 элемента без if-ов
    https://wandbox.org/permlink/pTLXgxKKQuaiVCxb

    j123123, 15 Июля 2018

    Комментарии (195)
  11. 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)