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

    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
    #include <stdio.h>
    char s[];
    int main ()
    {
        printf ("%s", s);
        for (char *s_p = s; *s_p; s_p++ )
        {
            printf ("%i,", *s_p);
        }
        printf ("};\n");
        return 0;
    }
    
    char s[] = R"(#include <stdio.h>
    char s[];
    int main ()
    {
        printf ("%s", s);
        for (char *s_p = s; *s_p; s_p++ )
        {
            printf ("%i,", *s_p);
        }
        printf ("};\n");
        return 0;
    }
    
    char s[] = {)";

    https://wandbox.org/permlink/uOQ7Uk6uFt4WVS2Y
    код на особом диалекте си (-std=gnu11) который генерирует код на более-менее обычном си (-std=c99) и этот сгенерированный код умеет будет генерировать сам себя
    Основано на сраной параше под названием raw string literals http://govnokod.ru/23178#comment388392 которая оказывается что поддерживается в особом диалекте си (-std=gnu11) https://stackoverflow.com/a/24850262

    Запостил: j123123, 16 Июля 2017

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

    • Кто-нибудь делал куайн на ассемблере, который бы работал по принципу самодизассемблирования?
      Ответить
    • https://wandbox.org/permlink/tD6i5N20Xy1lalLu версия, компилируемая говноплюсовыми компиляторами с -std=c++11
      char s[]= R"(#include <stdio.h>
      int main ()
      {
          printf ("char s[]= {");
          for (char *s_p = s; *s_p; s_p++ )
          {
              printf ("%i,", *s_p);
          }
          printf ("};\n%s", s);
          return 0;
      }
      )";
      #include <stdio.h>
      int main ()
      {
          printf ("char s[]= {");
          for (char *s_p = s; *s_p; s_p++ )
          {
              printf ("%i,", *s_p);
          }
          printf ("};\n%s", s);
          return 0;
      }

      Но в то же время отлично компилируется как код на Си с флагом -std=gnu99 или -std=gnu11 в GCC. Clang с флагами -std=gnu99 или -std=gnu11 уже неспособен это собрать. Неполная совместимость с GCC у него
      Ответить
    • а у тебя дома много гомо икон?
      Ответить

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