Всегда заключайте макрос в круглые скобки, потому что вы не всегда знаете контекст, в котором он будет использоваться - может случиться так, что соседний оператор имеет более высокий приоритет, и макрос не будет оцениваться правильно.
Не использовать круглые скобки оправдано, только если символ #define
'd является одним токеном, например 5
или "hello world"
.
Если вы рассматриваете возможность вызова вашего макроса с аргументами, которые являются выражениями, а не просто одиночными токенами, заключите каждое вхождение этого аргумента в скобки по той же причине, что и выше.
Другая вещь, которую следует избегать, - это передача выражений, которые имеют побочные эффекты, в качестве аргументов макроса. Если на соответствующий аргумент макроса ссылаются более одного раза в своем определении, оценка будет выполняться более одного раза, а это обычно не то, что нужно.