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

    Всего: 331

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

    +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
    #include <iostream>
    #include <functional>
    
    #define STD_FUNCTION(a, ...) typeof( a (*) __VA_ARGS__ )
    
    template<typename T>
    T do_op_t(T a, T b, STD_FUNCTION(T,(T,T)) op)
    {
      return op(a,b);
    }
    
    template
    <
    
      typename T,
    
      STD_FUNCTION(
        T,
        (
          T,T,
          STD_FUNCTION(
            T,
            (T,T)
          )
        )
      ) F1,
    
      STD_FUNCTION(
        T,
        (T,T)
      ) F2
    
    >
    T do_op_spec(T a, T b)
    {
      return F1(a, b, F2);
    }
    
    int add(int a, int b) { return a + b; }
    
    int mul(int a, int b) { return a * b; }
    
    std::function<int(int,int)> fnc = \
      do_op_spec\
      <
        int,
        do_op_t<int>,
        add
      >;
    
    int main()
    {
      std::cout << do_op_t<int>(9, 9, add) << "\n";
      std::cout << do_op_t<int>(9, 9, mul) << "\n";
      std::cout << do_op_spec<int, do_op_t<int>,add>(9,9)  << "\n";
      std::cout << do_op_spec<int, do_op_t<int>,mul>(9,9)  << "\n";
      std::cout << fnc(9,9) << "\n";
    }

    Какая крестопараша )))

    j123123, 23 Июля 2021

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

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <inttypes.h>
    
    typedef struct list list;
    
    struct list
    {
      list* next;
      uint32_t data;
    };
    
    #define ADD_LIST(ptr, val) \
    do { \
      (ptr)->next = (list *)alloca(sizeof(list)); \
      (ptr)->next->data = val; \
      (ptr)->next->next = NULL;\
    } while (0)
    
    // https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
    #define INIT_LIST(val) \
    ({ \
      list *INIT_LIST = (list *)alloca(sizeof(list)); \
      INIT_LIST->data = val; \
      INIT_LIST->next = NULL; \
      INIT_LIST; \
    })
    
    
    int main(void)
    {
      list *a = INIT_LIST(5);
      ADD_LIST(a,10);
      ADD_LIST(a->next,15);
      ADD_LIST(a->next->next,20);
      ADD_LIST(a->next->next->next,25);
      ADD_LIST(a->next->next->next->next,30);
    
      for(list *ptr = a; ptr != NULL; ptr = ptr->next)
      {
        printf("%d ", ptr->data);
      }
    
      return EXIT_SUCCESS;
    }

    А можно ли в крестоговне так сделать без Сишного Препроцессора?

    j123123, 19 Июля 2021

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

    +1

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    // https://github.com/shanecoughlan/OpenGEM/blob/ac06b1a3fec3f3e8defcaaf7ea0338c38c3cef46/source/OpenGEM-7-RC3-SDK/OpenGEM-7-SDK/GEM%20AES%20AND%20SOURCE%20CODE/FreeGEM%20AES%203.0%20(source%20code)/GEMEVLIB.C#L143
    /*
    *	Do a multi-wait on the specified events.
    */
    	WORD
    ev_multi(flags, pmo1, pmo2, tmcount, buparm, mebuff, prets)
    	REG WORD	flags;
    	REG MOBLK	*pmo1;
    	MOBLK		*pmo2;
    	LONG		tmcount;
    	LONG		buparm;
    	LPVOID		mebuff;
    	WORD		prets[];
    {
    	QPB		m;
    	REG EVSPEC	which;
    	REG WORD	what;
    	REG CQUEUE	*pc;
    #if MULTIAPP
    	WORD		evbuff[8];
    	WORD		pid;
    	SHELL		*psh;
    	LONG		ljunk;
    
    	pid = rlr->p_pid;
    	psh = &sh[pid];
    	if ( psh->sh_state & SHRINK )		/* shrink accessory	*/
    	{
    	  if (pr_shrink(pid, TRUE, &ljunk, &ljunk))
    	    ap_exit(TRUE); /* if no swap space terminate acc */ 
    	  psh->sh_state &= ~SHRINK;
    	}
    #endif
    
    						/* say nothing has 	*/
    						/*   happened yet	*/
    	what = 0x0;
    		 				/* do a pre-check for a	*/
    						/*   keystroke & then	*/
    						/*   clear out the forkq*/
    	chkkbd();
    	forker();
    						/*   a keystroke	*/
    	if (flags & MU_KEYBD)
    	{
    						/* if a character is 	*/
    						/*   ready then get it	*/
    	  pc = &rlr->p_cda->c_q;
    	  if ( pc->c_cnt )
    	  {
    	    prets[4] = (UWORD) dq(pc);
    	    what |= MU_KEYBD;
    	  }
    	}
    						/* if we own the mouse	*/
    						/*   then do quick chks	*/
    	if ( rlr == gl_mowner )
    	{
    						/* quick check button	*/
    	  if (flags & MU_BUTTON)
    	  {
    	    if ( (mtrans > 1) &&
    		 (downorup(pr_button, buparm)) )
    	    {
    	      what |= MU_BUTTON;
    	      prets[5] = pr_mclick;
    	    }
    	    else
    	    {
    	      if ( downorup(button, buparm) )
    	      {
    	        what |= MU_BUTTON;
    	        prets[5] = mclick;
    	      }
    	    }
    	  }
    						/* quick check mouse rec*/
    	  if ( ( flags & MU_M1 ) &&	
    	       ( in_mrect(pmo1) ) )
    	      what |= MU_M1;
    						/* quick check mouse rec*/
    	  if ( ( flags & MU_M2 ) &&
    	       ( in_mrect(pmo2) ) )
    	      what |= MU_M2;
    	}
    						/* quick check timer	*/
    	if (flags & MU_TIMER)
    	{
    	  if ( tmcount == 0x0L )
    	    what |= MU_TIMER;
    	}
    						/* quick check message	*/
    	if (flags & MU_MESAG)
    	{
    	  if ( rlr->p_qindex > 0 )
    	  {
    #if MULTIAPP
    	    ap_rdwr(MU_MESAG, rlr, 16, ADDR(&evbuff[0]) );
    #endif
    #if SINGLAPP

    Уххх бля

    j123123, 13 Июля 2021

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

    +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
    import std.stdio;
    
    template GenMix()
    {
      const char[] GenMix = 
        "template GenMix2()" ~
        "{" ~
        "  const char[] GenMix2 = \"writeln(\\\"Hello, Wandbox!\\\");\";" ~
        "};";
    }
    
    template MixMix(string Name)
    {
      const char[] MixMix = "mixin(" ~ Name ~ "!());";
    }
    
    mixin(GenMix!());
    
    
    void main()
    {
      mixin(GenMix2!());
      mixin(MixMix!("GenMix2"));
    }

    https://wandbox.org/permlink/1HpjfgrgVLyBSrXG

    ГОМОИКОННОСТЬ в D

    j123123, 10 Июля 2021

    Комментарии (42)
  6. Куча / Говнокод #27497

    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
    Короче, размышлял я как-то на тему того, как надо делать правильный
    теорем прувер, а не питушню всякую заедушную. Вот взять тот же Metamath -
    там какие-то непонятные distinct правила для хуиты, что надо какие-то там
    disjoint переменные, вот тут https://groups.google.com/g/metamath/c/M2dUfFATxD8
    про это подробнее сказано.
    
    Есть вот еще Metamath zero https://github.com/digama0/mm0 и это вот кажется ближе
    к тому, что мне нравится.
    Например вот https://github.com/digama0/mm0/blob/master/examples/assembler.mm1
    тут есть какая-то теорема про ELF хедер. Это вот определение ELF идентификатора
    
    local def ELF_IDENT_s: string =
    $ ,0x7f ': ,"E" ': ,"L" ': ,"F" ':
      _x02 ': _x01 ': _x01 ': _x00 ': _x00x8 $;
      
    и там еще какой-то такой хуйней описывается то, где там точка входа записана в заголовке,
    еще separation logic есть какая-то.
    Но вот если почитать спецификацию для этого mm0 языка
    https://github.com/digama0/mm0/blob/master/mm0.md :
    
    pure means that this sort does not have any term formers. It is an uninterpreted domain which may have
      variables but has no constant symbols, binary operators, or anything else targeting this sort. If a sort has
      this modifier, it is illegal to declare a term with this sort as the target.
    
    strict is the "opposite" of pure: it says that the sort does not have any variable binding operators. It is illegal
      to have a bound variable or dummy variable of this sort, and it cannot appear as a dependency in another
      variable. For example, if x: set and ph: wff x then set must not be declared strict. (pure and strict are not
      mutually exclusive, although a sort with both properties is not very useful.)
    
    provable means that the sort is a thing that can be "proven". All formulas appearing in axioms and theorems
     (between $) must have a provable sort.
     free means that definitions and theorems are not allowed to use dummy variables with this sort.
    
    то кажется мне, что слишком это сложно. Надо проще это всё сделать, по принципу какой-нибудь
    хрени типа SKI кобенационного исчисления. Т.е. допустим аксиома для модус поненса
    
    AXIOM
    %A
    P P $IMP %A %B
    _
    %B
    
    т.е. если мы матчим некую хуйню "%A" и некую хуйню "P P $IMP %A %B" где %A и %B это некая
    срань, которая может быть "что-то" "P чтото чтото" или там "P чтото P чтото чтото" и т.д.
    ну короче P означает что там две какие-то хуйни, вот как в той хрени https://govnokod.ru/27420
    то можем дополнительно синтезировать высказывание "%B"
    
    А теоремы это negj композиции из аксиом и других теорем. Типы можно прикручивать через какую-то хуйню
    типа если арифметику Пеано описывать, тип можно так что-то нахуевертить аксиому, ну типа
    
    Определение что ZERO это натуральное число.
    AXIOM
    _
    P NAT ZERO
    
    Что если инкрементнуть натуральное, будет тоже натуральное (S это функция следования)
    AXIOM
    P S %A
    P NAT %A
    _
    P NAT P S %A
    
    В общем надо бы подумать, как там запилить максимально простой и эффективно расширяемый язык для
    доказывания всякой хуйни.
    
    Смотрел Coq - какая-то ебаная перепитушня со всякими там типами-хуипами и какими-то
    блядь рекурсиями. Хер поймешь, как эта вся дрнсня работает. Меня ваши типы не ебут
    совершенно, я хочу сам свои типы конструировать, а не полагаться на какую-то невнятную
    ебанину.

    j123123, 05 Июля 2021

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

    +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
    /*
    https://habr.com/ru/post/523688/
    
    Так как мы работаем с макросистемой C/C++, то аналог функций — макрос, этой
    абстракцией мы и будем пользоваться. Мы будем передавать идентификатор первого
    рекурсивного макроса в следующий рекурсивный макрос, и тот, в свою очередь, по
    мере завершения своего исполнения будет передавать поток исполнения в первый
    рекурсивный макрос, так называемое продолжение. Нам также понадобиться терминальное
    продолжение — ML99_PRIV_REC_STOP — оно будет являться продолжением, поставляющимся
    в самый-самый первый рекурсивный макрос, ведь логично, что никуда, кроме как
    закончить исполнение программы на данном месте, нам перепрыгивать не нужно. Жилка
    двигателя рекурсии — это цепочка из макросов-раскрывателей следующего вида:
    */
    
    #define ML99_PRIV_REC_0(choice, ...)    ML99_PRIV_REC_NEXT(1, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_1(choice, ...)    ML99_PRIV_REC_NEXT(2, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_2(choice, ...)    ML99_PRIV_REC_NEXT(3, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_3(choice, ...)    ML99_PRIV_REC_NEXT(4, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_4(choice, ...)    ML99_PRIV_REC_NEXT(5, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_5(choice, ...)    ML99_PRIV_REC_NEXT(6, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_6(choice, ...)    ML99_PRIV_REC_NEXT(7, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_7(choice, ...)    ML99_PRIV_REC_NEXT(8, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_8(choice, ...)    ML99_PRIV_REC_NEXT(9, choice)(__VA_ARGS__)
    #define ML99_PRIV_REC_9(choice, ...)    ML99_PRIV_REC_NEXT(10, choice)(__VA_ARGS__)
    //...
    
    
    //И так до 1023:

    Интересно, этот чувак сидит на говнокоде?

    j123123, 03 Июля 2021

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

    +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
    // https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/qglobal.h?h=v5.13.1#n1017
    
    #if __cplusplus >= 201703L
    // Use C++17 if statement with initializer. User's code ends up in a else so
    // scoping of different ifs is not broken
    #define Q_FOREACH(variable, container)                                   \
    for (auto _container_ = QtPrivate::qMakeForeachContainer(container);     \
         _container_.i != _container_.e;  ++_container_.i)                   \
        if (variable = *_container_.i; false) {} else
    #else
    // Explanation of the control word:
    //  - it's initialized to 1
    //  - that means both the inner and outer loops start
    //  - if there were no breaks, at the end of the inner loop, it's set to 0, which
    //    causes it to exit (the inner loop is run exactly once)
    //  - at the end of the outer loop, it's inverted, so it becomes 1 again, allowing
    //    the outer loop to continue executing
    //  - if there was a break inside the inner loop, it will exit with control still
    //    set to 1; in that case, the outer loop will invert it to 0 and will exit too
    #define Q_FOREACH(variable, container)                                \
    for (auto _container_ = QtPrivate::qMakeForeachContainer(container); \
         _container_.control && _container_.i != _container_.e;         \
         ++_container_.i, _container_.control ^= 1)                     \
        for (variable = *_container_.i; _container_.control; _container_.control = 0)
    #endif

    А можно ли свой foreach сделать через какую-нибудь шаблонопарашу? Или тут, как обычно, нужна гомоиконность?

    j123123, 28 Июня 2021

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

    +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
    #include <stdio.h>
    #include <stdlib.h>
    
    #define DEREF(x) ({*(x);})
    #define PTR(x) ({&(x);})
    #define PTR_T(x) typeof(typeof(x) *)
    #define DEREF_T(x) typeof( ({typeof(x) DEREF_T; *DEREF_T;}) )
    
    
    void add5(PTR_T(int) a)
    {
      DEREF(a)+= 5;
    }
    
    int main(void)
    {
      int a = 0;
      printf("%d\n", a);
      add5(PTR(a));
      printf("%d\n", a);
      
      int b = 5;
      PTR_T(b) b_p = PTR(b); // int *
      printf("%d\n", DEREF(b_p) );
      
      DEREF_T(b_p) c = 666; // int
      printf("%d", c);
      
      return EXIT_SUCCESS;
    }

    https://govnokod.ru/27476#comment637183

    ASD_77:
    потому что я люблю Си и С++ но ненажижу * и & ... поэтому я решил исправить этот недочет в мире

    Исправил, проверь. Компилится только в GCC, всё-таки Clang не 100% совместим c гнутыми расширениями.

    j123123, 21 Июня 2021

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

    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
    // https://llvm.org/doxygen/AArch64AddressingModes_8h_source.html#l00051
    
     /// getShiftName - Get the string encoding for the shift type.
     static inline const char *getShiftExtendName(AArch64_AM::ShiftExtendType ST) {
       switch (ST) {
       default: llvm_unreachable("unhandled shift type!");
       case AArch64_AM::LSL: return "lsl";
       case AArch64_AM::LSR: return "lsr";
       case AArch64_AM::ASR: return "asr";
       case AArch64_AM::ROR: return "ror";
       case AArch64_AM::MSL: return "msl";
       case AArch64_AM::UXTB: return "uxtb";
       case AArch64_AM::UXTH: return "uxth";
       case AArch64_AM::UXTW: return "uxtw";
       case AArch64_AM::UXTX: return "uxtx";
       case AArch64_AM::SXTB: return "sxtb";
       case AArch64_AM::SXTH: return "sxth";
       case AArch64_AM::SXTW: return "sxtw";
       case AArch64_AM::SXTX: return "sxtx";
       }
       return nullptr;
     }

    Хорош ли тот язык, в котором такую херню надо писать?

    Именно поэтому я за гомоиконы.

    j123123, 06 Июня 2021

    Комментарии (56)
  11. C++ / Говнокод #27443

    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
    // https://habr.com/ru/post/550442/
    // Как компилятор C++ находит правильную функцию 
    
    // Вот так компилятор точно определяет, какую функцию следует вызвать:
    // https://hsto.org/webt/mp/tb/5k/mptb5kheibrreqspserc4sfdfrs.png
    
    // Эти шаги закреплены в стандарте C++. Каждый компилятор C++ должен следовать им,
    // и все это происходит во время компиляции для каждого вызова функции. Оглядываясь
    // назад, это очевидно, что должен быть такой алгоритм. Это единственный способ, которым
    // C++ может поддерживать все вышеупомянутые возможности одновременно. Это то, что вы
    // получите, если необходимо объединить их вместе.
    
    // Я предполагаю, что общая цель алгоритма — «делать то, что ожидает программист»,
    // и до некоторой степени он в этом преуспевает. Вы можете довольно далеко зайти,
    // полностью игнорируя этот алгоритм. Но когда вы начинаете использовать все возможности
    // C++, как при разработке библиотеки, то лучше знать эти правила.

    Да, это конечно очень круто, только вот существует примерно 0 компиляторов, которые полностью корректно (т.е. в полном соответствии с Говностандартом) реализуют эту срань с вызовом правильной функции/метода с учетом всей хуйни.

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51577 - этот баг висит еще 2011-12-16 и его так никто нихуя не пофиксил

    И в Clang такого рода баги тоже есть.

    j123123, 29 Мая 2021

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