@luaPower

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

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

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

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

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

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

Ведь запятая имеет самый низкий приоритет выполнения. Следовательно, любые операции, содержащиеся в s и n будут раскрыты корректно и функция получит нужные аргументы. Разве я не прав?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
В данном случае скобки, скорее всего, действительно роли не играют. Я не смог придумать вариант, в котором бы подстановка без скобок дала бы не правильный результат.
Но в других случаях скобки обычно нужны. Так что проще запомнить правило - параметры макросов при использовании заключай в скобки. И делать так всегда, чем каждый раз думать, нужны тут скобки или нет.
Кроме того, если ни я ни вы не придумали подходящего варианта для взлома конструкции, это не значит, что его не может быть в принципе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы