1. Си / Говнокод #27559

    +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
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    #include <stdlib.h>
    #include <stdio.h>
    #include <inttypes.h>
    
    #define STRING 0
    #define INTEGER 1
    
    
    #define CAT(x,y) x ## _ ## y
    #define J(x,y)  CAT(x,y)
    
    
    typedef union
    {
      char *J(v, STRING);
      int J(v,INTEGER);
    } Un;
    
    typedef struct
    {
      uint8_t Obj_t;
      Un u;
    } Object;
    
    #define IF_INSTOF(var, t, newvar) \
    if(var.Obj_t == t) \
    { \
      typeof(var.u.J(v,t)) *newvar = &var.u.J(v,t);
    
    int main(void)
    {
      Object obj1 = {STRING, {.J(v,STRING) = "1"}};
      
      IF_INSTOF(obj1,STRING,str)
        printf("String: %s\n", *str);
      }
      else
      {
        printf("Not a string\n");
      }
    
      Object obj2 = {INTEGER, {.J(v,INTEGER) = 1}};
      IF_INSTOF(obj2,INTEGER,i)
        printf("Integer: %d\n", *i);
      }
      else
      {
        printf("Not an Integer\n");
      }
    
      return EXIT_SUCCESS;
    }

    Вот такие смарткасты через препроцессор.

    https://govnokod.ru/27556#comment655527

    Запостил: j123123, 13 Августа 2021

    Комментарии (32) RSS

    • А то вот взяли какое-то говно тупое, и носятся с ним как какие-то лалки анскильные, будто бы это что-то реально важное
      Ответить
      • В Сишке можно сделать гораздо лучше: на гццизмах замутить проверки типов.

        Причём благодаря __builtin_choose_expr часть ветвлений могут быть перенесны в compile-time.

        https://github.com/exebook/generic-print

        https://habr.com/en/post/544038/
        Ответить
        • Это можно и через _Generic реализовать
          Пример использования _Generic :
          https://wandbox.org/permlink/EH5I1XUQrtisSEnR

          Но вообще, хуйня всё это. Надо чтоб работа с AST, гомоиконность!
          Ответить
    • #include <stdlib.h>
      #include <stdio.h>
      #include <inttypes.h>
      
      #define STRING 0
      #define INTEGER 1
      
      #define CAT(x,y) x ## _ ## y
      #define J(x,y)  CAT(x,y)
      
      
      typedef union
      {
        char *J(v, STRING);
        int J(v,INTEGER);
      } Un;
      
      typedef struct
      {
        uint8_t Obj_t;
        Un u;
      } Object;
      
      #define IF_INSTOF(var, t, newvar) \
      for(typeof(var.u.J(v,t)) *newvar = &var.u.J(v,t); 1; ({break;})) if(var.Obj_t == t)
      
      int main(void)
      {
        Object obj1 = {STRING, {.J(v,STRING) = "1"}};
        
        IF_INSTOF(obj1,STRING,str)
        {
          printf("String: %s\n", *str);
        }
        else
        {
          printf("Not a string\n");
        }
      
        Object obj2 = {INTEGER, {.J(v,INTEGER) = 1}};
        IF_INSTOF(obj2,INTEGER,i)
        {
          printf("Integer: %d\n", *i);
        }
        else
        {
          printf("Not an Integer\n");
        }
        
        return EXIT_SUCCESS;
      }

      Улучшил
      Ответить
      • Еще улучшил:
        #include <stdlib.h>
        #include <stdio.h>
        #include <inttypes.h>
        
        #define STRING 0
        #define INTEGER 1
        
        #define CAT(x,y) x ## _ ## y
        #define J(x,y)  CAT(x,y)
        
        
        typedef union
        {
          char *J(v, STRING);
          int J(v,INTEGER);
        } Un;
        
        typedef struct
        {
          uint8_t Obj_t;
          Un u;
        } Object;
        
        #define IF_INSTOF(var, t, newvar) \
        for(typeof(var.u.J(v,t)) *newvar = &var.u.J(v,t); newvar != NULL; newvar = NULL) if(var.Obj_t == t)
        
        #define OBJ_I(X) _Generic((X), \
          char *: ({Object OBJ_I = (Object){STRING, {.J(v,STRING) = (char *)(X)}}; OBJ_I;}), \
          int: ({Object OBJ_I = (Object){INTEGER, {.J(v,INTEGER) = (int)(X)}}; OBJ_I;}) \
        )
        
        int main(void)
        {
          Object obj1 = OBJ_I("1");
        
          IF_INSTOF(obj1,STRING,str)
          {
            printf("String: %s\n", *str);
          }
          else
          {
            printf("Not a string\n");
          }
        
          Object obj2 = OBJ_I(1);
        
          IF_INSTOF(obj2,INTEGER,i)
          {
            printf("Integer: %d\n", *i);
          }
          else
          {
            printf("Not an Integer\n");
          }
        
          return EXIT_SUCCESS;
        }
        Ответить
        • Хотя можно так вот упростить:
          #define OBJ_I(X) _Generic((X), \
            char *: (Object){STRING, {.J(v,STRING) = (char *)(X)}}, \
            int: (Object){INTEGER, {.J(v,INTEGER) = (int)(X)}} \
          )
          Ответить
    • это какой-то кошмар....
      Ответить
    • #define CAT(x,y) x ## _ ## y
      ## _ ##


      Свой C со смайликами и кошкодевочками.
      Ответить
      • CAR и CDR
        Ответить
        • я хотела буквально всё - хотела попробовать член, отдаться в киску и всё такое. Я очень часто плакала когда была дома, по этому поводу, потому что желания и секс - фантазии буквально разрывали мой мозг, и только когда я мастурбировала, организм успокаивался и затихало на время дичайшее желание.
          Ответить
        • ((какой) лисп) ))
          Ответить
          • #define CAR(x,y) x
            #define CDR(x,y) y
            Ответить
          • #define I(x) x
            #define K(x, y) x
            #define S(x, y, z) x(z)(y(z))
            #define B(f, g, x) f(g(x))
            #define C(f, g, x) f(x)(g)
            #define W(x, y) x(y)(y)
            Ответить
    • Всё, вышел дебиан 11-й
      Ответить
      • Perl 5.32
        PHP 7.4
        PostgreSQL 13
        Python 3, 3.9.1
        Rustc 1.48


        > GNU Compiler Collection 10.2
        > Clang 11
        Тьфу старьё. Но я всё-равно всегда собираю компилер руками...

        >Linux kernel 5.10 series
        > mesa (20.3.5-1)

        В целом жить можно, если железо новое не покупать.
        Ответить
      • А еще в Дебиане каждый релиз кто-то умирает. Некролог уже очень длинный.
        Вот и с этим релизом не стало троих человек...
        https://www.debian.org/News/2021/20210812
        Ответить
        • Windows 11 – это спокойное и творческое пространство, где вы можете продолжить свои увлечения и дополнить их новыми возможностями. От обновленного меню «Пуск» до новых способов взаимодействия с любимыми людьми, новостями, играми и контентом, Windows 11 – это место, где вы можете мыслить, выражать себя и творить максимально естественным образом.
          Ответить
          • Это полная хуйня для бингусовых креаклов.
            Ответить
          • Ни к одному из изображений не приклеена злая мышка или бегущая строка, которые были бы враждебно настроены по отношению к вам. Эта программа посылает на ваш компьютер сотни бесплатных сообщений, которые вы тоже можете отправлять в нее с помощью «XML-телефона». Кроме того, она почти не требует перезагрузки компьютера – вы сможете работать даже не выходя из своей комнаты. «XML» – это бесплатная и простая в использовании опция, которая позволяет использовать Windows 11 автоматически, а не через Windows Mobile , как раньше. Windows 11 – это сеть обмена ресурсами, в которой вы всегда можете перейти к дополнительному диалогу по интересующему вас вопросу. И, наконец, Windows 11 – это уникальная мастерская по перепрограммированию машины, где вы можете производить точные вычисления за считанные секунды. Благодаря этой программе ваш компьютер автоматически будет переписывать меню, добавлять разбиение цветов, загружать музыку и делать тысячи других вещей, которые вам захочется. Эта замечательная функция совершенно бесплатна, но если вы не можете получить в ней хорошего пинка, вам следует не лезть в холодную воду, а обратиться за консультацией к специалистам.

            #Порфирьевич
            Ответить
            • "PHP"– это спокойное и творческое пространство, где вы можете продолжить свои увлечения и дополнить их новыми возможностями.
              Ответить
        • После того как Шляпа набрала поттерингов и с потрохами продалась IBM из хороших, стабильных дистров только остаётся что Патрик и Дебиан.

          А ты openSUSE не пробовал?
          Ответить
        • А сколько всего на прыщегалерах?
          Ответить
      • Всем насрать
        Ответить
        • Мне не насрать, я внимательно слежу за тем что там нового в прыщемире.
          Ответить
          • Прыщемир, прыщемир, прыщемир!
            Красноглазый прыщемир.
            Ответить
            • Это поют прыщевоины когда идут на прыщевойны.
              Ответить

    Добавить комментарий