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

    −39

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    <?php include_once "stdio.h"; ?>
    
    int main()
    {
        <?php
            for($i = 0; $i < 20; $i++)
                echo 'printf("%d\n", '.$i.');';
        ?>
    }

    You can use PHP as a C preprocessor. The advantages are:

    very similiar syntax, so syntax highlighting works.
    <? and ?> are not used in standard C (with non-standard C, the only thing that gets broken is old GCC extension operator that returns min/max)
    it's rich in libraries.
    it's turing complete.
    usage of macros is very explicit. (compared to sneaky C preprocessor macros)

    For serious use though, making PHP print the #line directives is needed for debugging preprocessed code.


    http://stackoverflow.com/questions/396644/replacements-for-the-c-preprocessor/16256052#16256052
    ящитаю это гениально

    Запостил: CHayT, 20 Мая 2016

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

    • гуглил, как пользоваться m4, и прозрел
      Ответить
      • Решил пользоваться php-ом?
        Ответить
        • по количеству - и качеству - говна, и его проникновению в самые недры *всего* софта, пыху оооочень далеко до сишного препроцессора.
          Ответить
      • Вот же, положила:
        http://govnokod.ru/13492#comment189861
        Ответить
    • И вообще, внешние препроцессоры это хуита, надо чтоб гомоиконность!
      Ответить
      • а Алан Тьюринг и Фредди Меркьюри -- гомоиконы или нет?
        ими можно препроцессить сишку?
        Ответить
        • Анал Тьюринг и солист группы Queer
          Ответить
          • ну спасибо
            теперь даже проверка тьюринг-полноты будет звучать неоднозначно
            "тьюринг-полная вечеринка"
            Ответить
            • А машина Тьюринга?
              Ответить
              • боюсь, если я хоть раз представлю, что это значит, то придётся уходить из IT
                Ответить
                • А как называть JOIN в SQL, если оно не STRAIGHT и не NATURAL?
                  Ответить
                • > придётся уходить из IT
                  Тогда подумай ещё о преждевременной оптимизации, double-ended queue и проблеме останова...
                  Ответить
                  • А о разработке бэкенда лучше не даже не задумываться...
                    Ответить
    • Я бы переписал так:
      <?php include_once "stdio.h"; ?>
      
      int main()
      {
          <?php for($i = 0; $i < 20; $i++) { ?>
          printf("%d\n", <?=$i?>);
          <?php } ?>
      }
      Ответить
    • Для полноты картины нужен препроцессор Python на PHP.
      Ответить
    • теперь и в си можно посчитать факториал на этапе компиляции
      Ответить
      • Bormand шифрование на этапе компиляции считал:
        http://govnokod.ru/14528

        А Вы про какой-то факториал...
        Ответить
        • Факториал сложнее. Там придётся придумать длинную арифметику.
          Ответить
          • предлагаю несвежую идею: использовать вместо неё аксиомы Пеано в явном виде
            Ответить
    • define(`loop', `ifelse(`$1', 0,, `loop(decr($1))
          printf("%d\n", $1);')')dnl
      int main()
      {
      loop(20)
      }

      Угадайте препроцессор по кавычкам.
      Ответить
      • Судя по торчащим в разные стороны волоскам, это эм-четыре.
        Ответить
        • Так точно.

          В эм-четыре цикл нужно каждый раз изобретать заново. В "PHP" есть готовые циклы.

          Решение: переходите на "PHP"!
          Ответить
          • autoconf на php
            sendmail.php
            итд

            бугага
            Ответить
            • Sendmail не нужен. Он написан пидорасом. Переходите на Postfix или Exim.
              Ответить
              • Императивное программирование не нужен
                Он придуман пидарасом
                Ответить
                • Нецелесообразно™ использовать устаревший тормозной Sendmail, когда есть более эффективные средства.
                  Ответить
                  • На самом деле есть два повода использовать Sendmail.

                    1. У тебя 15 лет опыта работы с Sendmail
                    2. Ты выдумал новую схему адресации (например "domain::==user_name") и хочешь чтобы MTA его использовал

                    других поводов нет, конечно)
                    Ответить
                    • Ух, ты! А для него можно придумать схему "Куда: domain Кому: user_name"? Ну чтобы совсем было похоже на почтовый конверт?
                      Ответить
                      • Я думаю что да.
                        "Ruleset 3 is responsible for converting an address in an arbitrary format into a common format that sendmail will then process. The output format expected is the familiar looking local-part@host-domain-spec."

                        Сами рулы записываются в формате типа "R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3"

                        То-есть можно выдумать любой формат, и любое действие.
                        Именно потому Sendmailовые конфиги такие пиздецовые: когда пилили sendmail, SMTP вовсе не был стандартом де-факто.
                        Был и UUCP и Berknet и еще 20 доморощенных говнопротоколов, причем кого-то нужно было слать через IP, кого-то через dial up, кого-то вообще складывать в папочку.
                        Ответить
                        • То есть если бы Интернет не стал фактическим монополистом, то эта возможность была бы востребована?
                          Ответить
                          • Да, возможно что и так.
                            Но со временем все равно список систем бы утрясся, и их можно было бы захардкодить в MTA. А в 70х каждый выдумывал свой протокол.
                            Ответить
                    • > На самом деле есть два повода использовать Sendmail.
                      > 1. У тебя 15 лет опыта работы с Sendmail

                      в своей жизни я знал ровно одного человека кто умел конфигурировать sendmail (и я говорю про настоящий sendmail.cf, а не детский сад с пачкой m4 скриптов) - и он был очень большим сторонником postfix.
                      Ответить
                      • Я тоже умел, пока читал книжку Orielly.:) Потом быстро забыл.

                        На самом деле не нужно писать .cf напрямую. Другой вопрос что и m4 весьма дерьмов. Как минимум он императивен.

                        keyvalue файлы постфикса в тысячу раз проще и приятнее, и в 99.9991% случаев функционала постфикса достаточно
                        Ответить
                        • m4 не совсем императивен (см. способ создания цикла через макрос ifelse и рекурсию). Он даже на классические ЯП не похож, ибо построен по принципу «найти и заменить».
                          Ответить
                          • В общем, меня заклинило. Вроде и «вызов» макросов происходит, как в императивных языках, но при этом классических средств управления нет.
                            Ответить
                • >Императивное программирование не нужен
                  >Он придуман пидарасом
                  Плохого же ты мнения о Бауэре с Бэкусом.
                  Ответить
                • компьютер нинужен. Он придуман пидорасом
                  Ответить
      • > Угадайте препроцессор по кавычкам.

        ц препроц не достаточно убогий - давайте его на м4 заменим!
        Ответить
    • http://www.flasher.ru/forum/blog.php?b=188

      Шесть лет назад мне тоже в голову пришла похожая мысль...
      Ответить

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