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

    +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
    #include <stdio.h>
    #include <inttypes.h>
    #include <string.h>
    
    // endian dependend
    #define PUT3(a,b,c) (((uint64_t)a<<8*0) | ((uint64_t)b<<8*1) | ((uint64_t)c<<8*2))
    
    void testswitch(uint64_t x)
    {
      switch (x) 
      { 
        case PUT3('a','b','c'): printf("abc\n"); 
          break; 
        case PUT3('d','e','f'): printf("def\n"); 
          break; 
        case PUT3('g','h','i'): printf("ghi\n"); 
          break; 
        default: printf("Choice other than abc, def and ghi\n"); 
          break;   
       }
    }
    
    int main() 
    { 
       uint64_t x = 0;
       char a[] = "abc";
       memcpy(&x, a, sizeof(a)-1);
       testswitch(x);
    
       char b[] = "def";
       memcpy(&x, b, sizeof(a)-1);
       testswitch(x);
    
       char c[] = "ghi";
       memcpy(&x, c, sizeof(a)-1);
       testswitch(x);
       return 0; 
    }

    switch для строк!

    Перечитывал несвежие говнокоды, где я выкладывал творчество вконтактоолимпиадников https://govnokod.ru/23170#comment388376

    Запостил: j123123, 12 Ноября 2019

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

    • Пофиксил:
      .
         char b[] = "def";
         memcpy(&x, b, sizeof(b)-1);
         testswitch(x);
      
         char c[] = "ghi";
         memcpy(&x, c, sizeof(c)-1);
         testswitch(x);

      хотя там один фиг все из трех байтиков в этом примере, так что пофиг
      Ответить
      • Вроде на ГК уже были сишные свитчи по строкам до 8 символов.
        В тех реализациях как-то фундаментальнее работало.
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • Надо накодогенерировать макросов вида
        #define PUT1(a)
        #define PUT2(a,b)
        #define PUT3(a,b,c)
        ...
        Ответить
      • Одним свитчем можно пройтись по строкам длиной до 8 байтиков (8 однобайтовых символов или 4 двухбайтовых).

        Если нужно поддерживать более длинные строки, придётся строить рекурсивный алгоритм.
        Ответить
    • Ваньки, на али AWUS036NH за 11 басков!
      Ответить
      • Чойта?
        Ответить
        • На всякий случай напоминаю, что отвечать путин-пидору не имеет смысла.

          https://newsland.com/static/u/comment_image_from_text/16092019/100151640-4695392.jpg
          Ответить
        • Стертору мы не отвечаем.
          Ответить
        • tags: reaver, bully

          к моему удивлению там даже более специфичное железо продают, но скидки 5% всего
          Ответить
          • Заработай уже на инет.
            Ответить
          • показать все, что скрытоvanished
            Ответить
            • > через TR069
              Это не через него ли Мирай пролезал? Лол, он всё еще считается активным!
              Ответить
            • > WPS

              Нинужно.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Х.з., я для себя не вижу вообще никакой пользы от WPS. Мне не сложно пароль вбить когда новый девайс подключаю. Это редко надо.
                  Ответить
                  • То есть ты сидишь с ницшебродским PSK да еще и ротацию ключей не делаешь? И эти люди осуждают мощные ралинки!
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Ну да, рандомные символы до упора.

                      Какие, нахуй, гости? ^_^
                      Ответить
                      • > Какие, нахуй, гости? ^_^
                        Воображаемые 2D-девочки.
                        Ответить
                    • Когда гости приходят, нужно с ними общаться, а не в интернеты их пускать.
                      Ответить
                    • Мы же ватники. Когда собираемся, мы бухаем. Какой к чёрту пароль во время пьянки?
                      Ответить
                    • Гостям можно показать на экране смартфона QR-код с данными подключения. Кажется, в новых «Андроидах» по-умолчанию есть такая фича (а если нет — всегда можно скачать/написать приложуху).
                      Ответить
                      • Да можно вообще на бумажке его распечатать.
                        Ответить
                        • Несекьюрно. С другой стороны, если не разводить ненужную паранойю — бумажка с QR-кодом будет идеальным вариантом.
                          Ответить
                          • Почему несекьюрно? У них и так есть физический доступ к роутеру.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Вышел такой на кухню на звук кофемашины, а прекрасный незнакомец в это время впаял JTAG в твой верный XyZEL и ВСЁ
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • Они все для ведра, но редкие ведра для адаптера. Ядро с eth0 нужно.

                                    Бывает распаян уже, но на хайэндах.
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • https://github.com/marco-pratesi/android/blob/master/HOWTOs/Android-USB-Ethernet-Adapter-HOWTO.txt
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • Ну и чего рыло скрючил, я же тебе с самого начала написал, что шансов мало? Впрочем за пару баксов можно попробовать и убедиться.


                                              Любая эмбеддота сама и есть "контроллер JTAG".


                                              Да, еще в Android x86 тоже есть eth0.
                                              Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • Только его там нет, потому что езернетовского курнул модуля не завезли.

                                                  JTAG короче есть везде кроме смарткарт и подобного
                                                  Ответить
                                                • > ээ что?

                                                  Почти во всех микросхемах есть контроллер JTAG, ну кроме самых тривиальных. На плате все такие микросхемы просто объединяются в цепочку, никакого дополнительного обвеса там не надо. Это юзается для boundary scan'а - проверки, что на плате всё припаяно и работает. Эдакий функциональный тест после сборки. Ну и для заливки прошивок, отладки и т.п.
                                                  Ответить
                                                  • Нет, JTAG есть далеко не во всех микросхемах. Хотя это еще зависит от того, что ты называешь микросхемами. Вот зачем например засовывать JTAG в микросхему I2C памяти? Типа такой хрени http://sankios.imediabank.com/at24c
                                                    Ответить
                                                    • До распространения JTAG в той же роли зачастую выступала линия I2C.
                                                      Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • Вика говорит, что его используют для тестирования и для прошивки:
                                                      https://ru.wikipedia.org/wiki/JTAG

                                                      В более простых микросхемах в той же роли использовалась шина I2C:
                                                      https://ru.wikipedia.org/wiki/I²C
                                                      Ответить
                                                      • показать все, что скрытоvanished
                                                        Ответить
                                                        • Только если там вообще есть что шить. Ну и у тех же ARM'овских контроллеров есть бит защиты который навсегда отрубает отладку и доступ к флешке извне.
                                                          Ответить
                                                          • Можно растворить корпус и сделать какую-нибудь херню, чтоб там эти битики обнулились. См. например https://www.bunniestudios.com/blog/?page_id=40

                                                            >Using this technique, I was able to effectively reset the security fuses without impacting the FLASH code array too much. The pictures below show the array memory status according to the programming/readback tool I was using. A part of the code array was still erased, but probably some judicious resizing of the electrical tape could fix that problem.
                                                            Ответить
                                                          • показать все, что скрытоvanished
                                                            Ответить
                                                            • У контроллеров - без проблем, если бит защиты забыли включить.

                                                              На флешках и eMMC - нет, у них вроде не ставят jtag. Но если подключиться дебаггером к процессору, который с этой флешкой работает, то в теории можно.

                                                              Жопа в том, что JTAG - это просто транспорт, а набор команд у каждого чипа свой, часто вообще не документированный. Поэтому ты вроде и видишь чип в цепочке, а что он умеет - да хуй бы знал.
                                                              Ответить
                                                              • А теперь посмотрим, с чего началось обсуждение JTAG. Некто под ником путин-пидор написал: «Вышел такой на кухню на звук кофемашины, а прекрасный незнакомец в это время впаял JTAG в твой верный XyZEL и ВСЁ».

                                                                Уже представил себе, как гости пришли с паяльником, с припоем и разъёмом, с JTAG-адаптером и с кучей софта (у них же пока нет доступа к «Интернету», поэтому нужно брать с собой) для всевозможных чипов (у каждого чипа протокол свой, поэтому универсальным софтом не отделаешься). Кстати, на чём гости будут запускать прошивальщик? Притащат ноутбук или воспользуются компом хозяина?

                                                                Но самый главный вопрос, что они могут сделать с роутером через JTAG посредством такого пердолинга?
                                                                Ответить
                                                                • > пришли с паяльником

                                                                  На этом добычу пароля можно считать законченной. Зачем вся эта ёбля с jtag'ом если можно засунуть паяльник в жопу?
                                                                  Ответить
                                                                  • Напоминает шутку 20-летней давности. Как взломать банкомат? Берёшь кувалду и ноутбук. Подходишь к банкомату и разбиваешь его кувалдой. Забираешь деньги.

                                                                    Зачем тогда ноутбук? Ну какой же хакер без ноутбука!
                                                                    Ответить
                                                                    • показать все, что скрытоvanished
                                                                      Ответить
                                                                      • > времен когда русьня не видела банкомат
                                                                        Карта мир вернула эти времена в зад.

                                                                        А вообще в рашке отдельно стоящих уличных банкоматов вообще нет.
                                                                        Ответить
                                                                        • показать все, что скрытоvanished
                                                                          Ответить
                                                                          • показать все, что скрытоvanished
                                                                            Ответить
                                                                          • Никаким. Забей. Ты не прокормишь этого кадавра. Он пишет здесь не для того, чтобы опубликовать полезную информацию, а чтобы спровоцировать нас на ответ, который он потом заскриншотит и выложит в «Сосач» со словами: «Смотрите, какие ватники тупые».
                                                                            Ответить
                                                                            • Смотрите, какой ватный инканус тупой!

                                                                              Впрочем, даже он сразу же снимает свой велфер с "мира" и переводит на "визу".
                                                                              Ответить
                                                                            • показать все, что скрытоvanished
                                                                              Ответить
                                                                              • Это ты зря, ватником быть очень интересно и выгодно, можно получать двойной кайф игнорируя русофоба сёму и одновременно читая его. И ежегодные великие и окончательные победы над игилофашистами в Сирии опять же. Даже от камней с неба крепчаешь!
                                                                                Ответить
                                                                  • > Зачем вся эта ёбля с jtag'ом если можно засунуть паяльник в жопу?

                                                                    Можно пароль вообще не помнить, а хранить на особом самопальном девайсе с УФ-стираемым EPROM и УФ-светодиодом прямо возле окошка. И если стереть пароль, никаким паяльником в жопу его уже не добыть.
                                                                    Ответить
                                                                    • > не добыть
                                                                      Не просто будет объяснить все эти технические подробности с паяльником в жопе.
                                                                      Ответить
                                                                      • Ну, жопу это хоть и не спасет, но пароль добыть не выйдет при всем желании и усердии.
                                                                        Ответить
                                                                        • С другой стороны, своевременное раскрытие паролей может спасти жопу от паяльника. А между паролями и здоровой жопой обычно предпочтительнее выбрать жопу.

                                                                          Кстати, в связи с этим есть интересная техника: делаем «TrueCrypt» контейнер, записываем на него что-нибудь компрометирующее, но не УК-шное (порнуха с 18+, пиратский винрар, etc), пароль храним на бумажке. А внутри этого контейнера делаем ещё один, скрытый (штатная функциональность «TrueCrypt»), на который и записываем ЦП, поварённую книгу анархиста и дистрибутив «Kali Linux».
                                                                          Суть в том, что если придут маски-шоу — им после некоторых колебаний (при виде паяльника) сдаётся бумажка с паролем, выплачивается штраф за незначительную хуйню в контейнере — и всё, если повезёт, то глубже копать не будут. А вот если у пациента на компе всё чистенько, легальненько и даже «WinRAR» куплен — у масок возникнут обоснованные вопросы.
                                                                          Ответить
                                                                          • > копать не будут
                                                                            Но ведь они тоже знают про многослойные контейнеры...
                                                                            Ответить
                                                                            • Ну тогда можно первый скрытый слой из многослойного контейнера показать(на котором будет что-то более серьезное, специально подготовленное на такой случай), а второй (с по-настоящему секретной инфой) не показывать. Как они поймут, что слоев именно столько-то?
                                                                              Ответить
                                                                            • Именно поэтому во внешний контейнер и записывается «немного нелегальное». Такой подход предназначен для обычных анимешников людей, к которым маски-шоу заявятся скорее всего просто для выполнения плана. И в таком случае, когда хренотени ищут не что-то конкретное, а что-нибудь, внешний контейнер с административкой может их устроить.

                                                                              Разумеется, если у них есть какие-то более серьёзные подозрения (на террориста, экстремиста, политического активиста) — копать они будут куда лучше, и контейнер на наличие вложений проверят (паяльником).
                                                                              Ответить
                                                                              • Интересно. А до какой глубины вложений они проверять будут? Пока анус не будет окончательно разрушен?
                                                                                Ответить
                                                                                • Анус не нужен.
                                                                                  Ответить
                                                                                • Пока не найдут рецептов сбора бомб и методичек Навального. Ну или пока не надоест (тогда просто найдут в анусе кармане у подозреваемого пакетик конопли).
                                                                                  Ответить
                                                                                  • Хм, т.е. если я эту бесполезную хуйню положу на рабочий стол, то они дальше и искать не будут? Годно.
                                                                                    Ответить
                                                                                    • Как повезёт, гарантий никто не даст, естественно. Всё зависит от того, кто, что и зачем ищет.
                                                                                      Ответить
                                                                          • >> даже «WinRAR» куплен

                                                                            Это вообще деанон в момент покупки. Особенно в эпоху, когда есть «7-zip», «Freearc», «Peazip» и ещё куча бесплатных.

                                                                            Да «WinRAR» не покупали, когда и конкурирующих архиваторов не было...

                                                                            https://s.put.re/9K42VBx5.jpeg
                                                                            Ответить
                                                                • показать все, что скрытоvanished
                                                                  Ответить
                                                                • показать все, что скрытоvanished
                                                                  Ответить
                                                                • > что они могут сделать
                                                                  Лишнехромосомный, уже раза три упоминали
                                                                  > заливки паршивок

                                                                  Впрочем, менее тривиально, но более фруктово было бы снять пассфразу из памяти
                                                                  Ответить
                                                              • > видишь чип в цепочке, а что он умеет
                                                                Учитывая, консумерские мыльницы представляют собой System-on-Chip... ну ты понял.
                                                                Ответить
                                            • показать все, что скрытоvanished
                                              Ответить
                                      • Типа того, причем в прыщеведре поддержка должна быть в ядре.

                                        > Как определить
                                        Есть всякие кастомайзы типа Eee PC или TransformerPad, там оно точно есть, а в остальных случаях нужен какой-то пердолинг, чтобы определить. Так что проще попробовать.

                                        Сначала найти конечно надо, ну а потом разумеется впаять гребенку.
                                        Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • На самом свежем — да: https://www.cnet.com/how-to/android-10-share-a-wi-fi-password-in-a-snap-with-a-qr-code/
                              Ответить
                            • Да один хер почти все какую-нибудь ставят.
                              Ответить
                              • Причём подцепить её можно случайно, установив какую-нибудь программу-комбайн. В некоторых веб-браузерах читалка QR есть.
                                Ответить
                              • На ведре добавить вификонфиг просто, но придется выгнать гостей с другими платформами.
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Я в общем-то только у себя дома wifi и юзаю. В остальных местах и мобильный инет сойдёт.
                                  Ответить
                                • У русни есть специальный "закон" против домашних микросот, поставишь и поедешь на лисоповал. А микросоту твою заберет себе какой мент чи дупутат.
                                  Ответить
                        • показать все, что скрытоvanished
                          Ответить
                      • Ващет нельзя. Для этого нужен рут.
                        Ответить
        • чувак, ты уже понял, что с ним нехуя пиздедь?
          Ответить
      • И чо? Это что-то сверхценное?
        Ответить
    • Кстати, GCC такую вот хрень неосиливает скомпилить в режиме Си:
      #include <stdio.h>
      #include <inttypes.h>
      #include <string.h>
      
      // endian dependend
      #define PUT3(a) (((uint64_t)a[0]<<8*0) | ((uint64_t)a[1]<<8*1) | ((uint64_t)a[2]<<8*2))
      
      void testswitch(uint64_t x)
      {
        switch (x) 
        { 
          case PUT3("abc"): printf("abc\n"); 
            break; 
          case PUT3("def"): printf("def\n"); 
            break; 
          case PUT3("ghi"): printf("ghi\n"); 
            break; 
          default: printf("Choice other than abc, def and ghi\n"); 
            break;   
         }
      }
      
      int main() 
      { 
         uint64_t x = 0;
         char a[] = "abc";
         memcpy(&x, a, sizeof(a));
         testswitch(x);
      
         char b[] = "def";
         memcpy(&x, b, sizeof(b));
         testswitch(x);
      
      
         char c[] = "ghi";
         memcpy(&x, c, sizeof(c));
         testswitch(x);
         return 0;
      }

      https://godbolt.org/z/TjYqd-
      а clang и icc осиливает.
      Ответить
      • Потому что литералы в сишке char* а не const char*.
        Ответить
      • https://godbolt.org/z/xvGJB4

        <source>:7:10: warning: expression is not an integer constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]

        Охуенно, учитывая что GCC такое компилить отказывается
        Ответить
        • https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92487 :

          >So this is some GNU extension, but why GCC doesn't support it?

          Because it was undocumented one which was removed a long time ago.

          And when I say undocumented one, I Mean it was a bug that GCC accepted it in the first place :).
          Ответить
          • Фу, пиздец, иссуе трекер из 2000-х.
            Ответить
            • у clang он кстати такой же
              Ответить
            • показать все, что скрытоvanished
              Ответить
            • У них уголочки, скруглённые с помощью CSS3 (border-radius). Это уже 2010-е.
              Ответить
            • А что сейчас модно в 2019-2020 году? Проприетарную жиру они там не одобрят, нишвабодно
              Ответить
              • В 2019 году модно делать сайты, на которых вообще ничего невозможно найти. Глянул — листай дальше. И чтобы ещё побольше скриптов, чтобы жрало память и тормозило в любом браузере.

                Даже «Мозилла» какую-то хуйню сотворила, из-за чего у них теперь каждая вторая страница выдаёт «Rendering error» вместо текста статьи.
                Ответить
              • Только что нашёл остросюжетную статью:
                http://metroblog.ru/post/4853/
                Ответить
                • Блядь, сука, вот от «Гугла» просто пиздец как полыхает. Особенно весело у них на мобильной версии, где порядок вкладок текст/картинки/видео/новости/etc меняется ПОСЛЕ, СУКА, ЗАГРУЗКИ!!! ДИНАМИЧЕСКИ, СКРИПТАМИ!!!! Я, БЛЯДЬ, ВВЁЛ ЗАПРОС, ЖМУ НА КАРТИНКИ, А ЭТО УЁБИЩНОЕ ТВОРЕНИЕ ТУПЫХ ДЕГЕНЕРАТОВ-МАРКЕТОЛОГОВ ДЛЯ ТУПЫХ ДЕГЕНЕРАТОВ-ДОМОХОЗЯЕК ПОДМЕНЯЕТ ПОРЯДОК ВКЛАДОК ПРЯМО ПОД, СУКА, ПАЛЬЦЕМ И ОТПРАВЛЯЕТ МЕНЯ СМОТРЕТЬ КАРТЫ!!! СУКА, НЕНАВИЖУ, УБЛЮДКИ, ГОРИТЕ В АДУ, МРАЗИ!!!
                  Ответить
                  • Меня ещё раздражает, когда начинаю вводить текст в строку поиска, а по мере загрузки страницы эта строка теряет фокус или текст сбрасывается и после окончания загрузки приходится свой запрос вводить повторно.

                    Вот что такое сверхсложное может грузиться пару минут, да ещё сбрасывать фокус или введённый текст, если всего лишь нужно отобразить форму с текстовым инпутом и кнопкой отправки?
                    Ответить
                  • Что ж с тобой будет после знакомства с Линкедином
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
                • показать все, что скрытоvanished
                  Ответить
    • Тогда уж лучше
      switch (PUT3(x[0], x[1], x[2])) 
      { 
          case PUT3('a','b','c'): printf("abc\n"); 
            break
      Ответить
    • Я за «C++».
      constexpr uint64_t string_hash(std::string_view str)
      {
          uint64_t hash = 0xcbf29ce484222325;
          for (auto && c : str) {
              hash ^= c;
              hash *= 0x100000001b3;
          }
          return hash;
      }
      
      int main()
      {
          std::string s;
          std::cin >> s;
          switch (string_hash(s)) {
          case string_hash("hello"): std::cout << "Hello!" << std::endl; break;
          case string_hash("bye"): std::cout << "Bye!" << std::endl; break;
          default: std::cout << "String not found." << std::endl; break;
          }
          return EXIT_SUCCESS;
      }

      https://wandbox.org/permlink/MQup6gNK125oeRgK
      Ответить
      • Именно поэтому я за «PHP».
        Ответить
      • Тут КОЛЛИЗИИ могут быть, хуйня короче
        Ответить
        • В каждом кейсе придётся дополнительно делать полное сравнение строк на равенство...

          Но иногда такое говно может ускорить поиск: если у нас много очень длинных строк с одинаковым началом, то несовпадение хэша их сразу отсечёт.
          Ответить
        • Но они обнаружатся в компайлтайме, или нет?
          Ответить
          • Они в компилтайме обнаружатся если у тебя string_hash("hello") и string_hash("bye") дадут одинаковый хеш (тогда будет switch с одинаковыми метками - error: duplicate case value)

            Если же у тебя хеш для слова "huipizda" который ты введешь с клавиатуры совпадет с хешем для "hello" в case то в компилтайме нихуя не обнаружится
            Ответить
        • Тут нужен мастер-мокроёб, чтобы довести PoC до MVP.
          constexpr uint64_t string_hash(std::string_view str)
          {
              return str.size();
          }
          
          int main()
          {
              std::string s;
              std::cin >> s; 
          #define CASE(s, x) case string_hash(x): if (x != s) { goto collision; }  
              switch (string_hash(s)) {
              CASE(s, "hello") std::cout << "Hello!" << std::endl; break;
              CASE(s, "bye") std::cout << "Bye!" << std::endl; break;
              collision: std::cout << "Collision!" << std::endl; break;
              default: std::cout << "String not found." << std::endl; break;
              }
          #undef CASE
              return EXIT_SUCCESS;
          }

          https://wandbox.org/permlink/vGraig9HkxoFipJK
          Ответить
          • Сколько хуйни в крестоговно не добавляй - всё равно Сишный Препроцессор™ нужен
            Ответить
            • Ничего, вот добавят std::embed — и окончательно избавимся от тяжёлого наследия царского режима сишки!
              Ответить
    • У меня тут всё мокренько:
      #include <stdio.h>
      #include <stdint.h>
      #include <string.h>
      #include <stdbool.h>
      
      #define STRSWITCH(s) do{\
          bool flag_=false;\
          char*switchstr_=(s);\
          int switchstrlen_=strlen(switchstr_);{{
      
      #define STRCASE(s) \
          }}{\
              char*casestr_=(s);\
              int casestrlen_=strlen(casestr_);\
              flag_=flag_||switchstrlen_==casestrlen_&&!strncmp(switchstr_,casestr_,casestrlen_);\
              if(flag_){
      
      #define STRSWITCHDEFAULT }}{{
      #define ENDSTRSWITCH }}}while(0);
      
      void test(char *str)
      {
          printf("case \"%s\":\n", str);
          STRSWITCH (str)
          STRCASE("hui")
              puts("hui");
          STRCASE("pizda")
              puts("pizda"); break;
          STRCASE("G-goorda")
              puts("G-goorda");
          STRSWITCHDEFAULT
              puts("default");
          ENDSTRSWITCH
      }
      
      int main(void)
      {
          test("govno");
          test("hui");
          test("pizda");
          test("G-goorda");
          return 0;
      }
      https://ideone.com/Ifo0IE
      Ответить

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