MBR (mbr) wrote,
MBR
mbr

Categories:

Гигиена в макросах

Читаю я вот тут людей, которые железо для обсерваторий делают и тихо охреневаю. Вот ведь простейшая же вешь. Азы можно сказать.

Пусть есть макрос:

#define F(x, y)            x * x + y

Видите проблему? Если нет, обязательно дочитайте до конца.

Берем такую реализацию:

F(a, b) -> a * a + b

Вроде как все замечательно и будет работать. Проект закрыт. А через год делаем небольшую правку

F(a + c, b) -> a + c * a + c + b

И в этом моменте мы начинаем хвататься за голову и думать что-же такое случилось. А случился попросту говнокод. Чтобы так не было достаточно небольшого изменения:

#define F(x, y)            (x) * (x) + (y)

Окей, а потом мы делаем еще одну правку:

F(a + c, b) * d -> (a + c) * (a + c) + (b) * d

И опять хватаемся за голову. Потому, что мы забыли еще в одном месте себя обезопасить

#define F(x, y)            ((x) * (x) + (y))

Используя макросы - всегда - просто заведите себе за правило - всегда оборачивайте аргументы и всю функцию. Простая гигиена сэкономит тучу времени на отладку странного поведения.
Tags: it
Subscribe

  • талант

    Естественно, я таких видел тысячи. Но так красиво описать суть явления! Оригинал взят у honestlil в post Я давеча ехала из одного…

  • Автопутешествия выходного дня

    После Азербайджана - вторая поездка. Ижицы - Иверский монастырь - Ижицы - Старая Русса - Новгород - Порхов - Псков - Изборск - Печоры - Остров.…

  • Белгород

    А что я все про Азию, да про Африку? Расскажу-как я про Белгород, где прожил около 15 лет. Фотографии в альбоме « 2009 Belgorod» a lexeyk13 на…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 19 comments

  • талант

    Естественно, я таких видел тысячи. Но так красиво описать суть явления! Оригинал взят у honestlil в post Я давеча ехала из одного…

  • Автопутешествия выходного дня

    После Азербайджана - вторая поездка. Ижицы - Иверский монастырь - Ижицы - Старая Русса - Новгород - Порхов - Псков - Изборск - Печоры - Остров.…

  • Белгород

    А что я все про Азию, да про Африку? Расскажу-как я про Белгород, где прожил около 15 лет. Фотографии в альбоме « 2009 Belgorod» a lexeyk13 на…