Задать вопрос
@luaPower

Нужно ли заключать все переменные макроса в скобки?

Здравствуйте.

Я понимаю, что в большинстве случаев это просто необходимо. Однако, может ли кто-нибудь объяснить, зачем использовать скобки в данном примере:

#define bzero(s, n) memset((s), 0, (n))

Чем опасно применение такого варианта?

#define bzero(s, n) memset(s, 0, n)

Ведь запятая имеет самый низкий приоритет выполнения. Следовательно, любые операции, содержащиеся в s и n будут раскрыты корректно и функция получит нужные аргументы. Разве я не прав?
  • Вопрос задан
  • 179 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Решения вопроса 1
@res2001
Developer, ex-admin
В данном случае скобки, скорее всего, действительно роли не играют. Я не смог придумать вариант, в котором бы подстановка без скобок дала бы не правильный результат.
Но в других случаях скобки обычно нужны. Так что проще запомнить правило - параметры макросов при использовании заключай в скобки. И делать так всегда, чем каждый раз думать, нужны тут скобки или нет.
Кроме того, если ни я ни вы не придумали подходящего варианта для взлома конструкции, это не значит, что его не может быть в принципе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы