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

    −45

    1. 1
    2. 2
    #define KO(s) (sizeof(s) - 1)
    #define KOKO(s) s, KO(s)

    Это типа чтобы в функции rooster(const char *s, unsigned len) пихать кококомпайл-тайм константы: rooster(KOKO("kokoko"));

    Этим самым делая прототип и вызов функции разными. Зачем?

    Запостил: codemonkey, 02 Августа 2016

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

    • > Зачем?

      Искра генитальности" => свежие грабли
      Ответить
      • > свежие грабли
        не, подобный макрос ещё в винапи давно был
        Ответить
    • Для максимального перфоманса. Разве у сишников такое не в порядке вещей?
      Ответить
      • Это ясно. Вопрос, почему не писать:
        #define ROOSTER_CALL "kokoko"
        rooster(ROOSTER_CALL, SL(ROOSTER_CALL));
        вместо
        rooster(KOKO(ROOSTER_CALL));
        ?
        Ответить
        • Чтобы писать
          rooster(KOKO("kokoko"));
          Ответить
        • Ну типа придется запиливать макрос для каждого литерала. А так один KOKO на всю программу.
          Ответить
        • Можно добавить к функции rooster макрос вида:
          void rooster(const char *, size_t)
          #defie ROOSTER(s) rooster("" s, sizeof (s) - 1)

          Похожий приём используется в Lua, см функцию lua_pushlstring и макрос lua_pushliteral. Из-за "" ничего кроме строкового литерала в этот макрос передать нельзя
          Ответить
          • > Из-за "" ничего кроме строкового литерала в этот макрос передать нельзя
            Интересный костыль. Только он позволяет передать -100, например. Лучше бы этот литерал был после s.
            Ответить
    • А потом кто-нибудь по запарке пихнёт туда переменную.
      Ответить
      • Или позовёт что-то типа goatse(const char* s, unsigned flags).
        Ответить
        • о/т. странно что еще никто в добавок к лолкатс не сделал гоатсе языка программирования. например, оператор ввода - one cup, оператор вывода - two girls, цикл - lemon party.
          Ответить
          • > lemon party
            Я что-то пропустил?

            /me побежал гуглить

            З.Ы. Блядь, как это развидеть?
            Ответить
            • http://lemonparty.org/

              Оно ещё онлайн.
              Ответить
            • Ебанный в рот, нахуя?! Нахуя вы про это заговорили! make me unsee it
              Ответить
              • Звучит так, будто ты blue waffle ещё не видел.
                Ответить
                • на работе, не буду открывать
                  Ответить
                  • Гугл показывает хуйню какую-то - большие язвы с синеватым оттенком. Подробнее рассмотреть, увы, не смог.
                    Ответить
                    • Ещё же "перламутровые", или что-то такое, было. С гуглофильтрацией гуглить нормально, а без неё - лучше не стоит.
                      Ответить
                      • О, перламутровые менее крипотные - всего-лишь пупырышки на хуях.
                        Ответить
                      • Вот одна из подборок:
                        https://tjournal.ru/p/never-google-this
                        Ответить
          • Нет, цикл -- это meatspin.
            Ответить
            • Видел я гифку, где к электродвигателю прикрепили кусок мяса, который вращался и листал картинки на смартфоне. Это оно? Или тоже что-то гоатсеподобное?
              Ответить
              • http://meatspin.com/

                Что сегодня за день? Ссылки на шок-сайты просто выпрашивают.
                Ответить
                • Ещё про кое-что забыли:
                  http://govnokod.ru/16857#comment251408

                  Вот тут про автодополнение и фильтрацию:
                  http://govnokod.ru/17379#comment260443

                  Мне кажется, что ещё что-то обсуждали примерно во времена Уебкилла, только не могу найти.
                  Ответить
                • P.S. Весь список сразу, чтобы не спрашивали:
                  http://lolshock.com/
                  Ответить
              • Нет, не оно. Загугли. Только там флеш нужен.
                Ответить
    • #define KOKOKO(s) s, KO(s), KOKO(s)
      Ответить
      • Сегодня на работе в коде нашел переменную kokoko xD
        Ответить
    • Сложный вопрос, на самом деле

      С одной стороны это убирает бойлерплейт. Ну правда: меньше буков писать же.
      С другой таки да: можно забыть что макрос это не функция и наворотить делов
      Но с третьй стороны мокрос же потому и писиться большими буквами чтобы не путят
      Ответить

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