- 1
- 2
#define KO(s) (sizeof(s) - 1)
#define KOKO(s) s, KO(s)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−45
#define KO(s) (sizeof(s) - 1)
#define KOKO(s) s, KO(s)
Это типа чтобы в функции rooster(const char *s, unsigned len) пихать кококомпайл-тайм константы: rooster(KOKO("kokoko"));
Этим самым делая прототип и вызов функции разными. Зачем?
Искра генитальности" => свежие грабли
не, подобный макрос ещё в винапи давно был
вместо ?
void rooster(const char *, size_t)
#defie ROOSTER(s) rooster("" s, sizeof (s) - 1)
Похожий приём используется в Lua, см функцию lua_pushlstring и макрос lua_pushliteral. Из-за "" ничего кроме строкового литерала в этот макрос передать нельзя
Интересный костыль. Только он позволяет передать -100, например. Лучше бы этот литерал был после s.
Я что-то пропустил?
/me побежал гуглить
З.Ы. Блядь, как это развидеть?
Оно ещё онлайн.
https://tjournal.ru/p/never-google-this
Что сегодня за день? Ссылки на шок-сайты просто выпрашивают.
http://govnokod.ru/16857#comment251408
Вот тут про автодополнение и фильтрацию:
http://govnokod.ru/17379#comment260443
Мне кажется, что ещё что-то обсуждали примерно во времена Уебкилла, только не могу найти.
http://lolshock.com/
С одной стороны это убирает бойлерплейт. Ну правда: меньше буков писать же.
С другой таки да: можно забыть что макрос это не функция и наворотить делов
Но с третьй стороны мокрос же потому и писиться большими буквами чтобы не путят