Няшная / Говнокод #27559 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 j123123, (Updated )

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

  • А то вот взяли какое-то говно тупое, и носятся с ним как какие-то лалки анскильные, будто бы это что-то реально важное
    Ответить
  • #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 со смайликами и кошкодевочками.
    Ответить
      • я хотела буквально всё - хотела попробовать член, отдаться в киску и всё такое. Я очень часто плакала когда была дома, по этому поводу, потому что желания и секс - фантазии буквально разрывали мой мозг, и только когда я мастурбировала, организм успокаивался и затихало на время дичайшее желание.
        Ответить
        • #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)
          Ответить
    • 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)

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

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

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8