Когда это необходимо, чтобы положить целое (правое) выражение макроса определения в скобках?Скобка в определении макросов
Если я что-то вроде
#define SUM(x, y) ((x)+(y))
Я должен правильно поставить выражение в скобках, потому что «+» имеет низкий приоритет в C (и это не будет работать, если я хотел бы использовать его в следующий контекст SUM(x, y) * 5U
)
Эти скобки все еще требуются, если я использую оператор с наивысшим приоритетом, например
#define F foo()
или даже
#define ACCESS(x, y) (x)->(y)
выражение существует, что это нарушило бы фактическое значение, как это будет делать для SUM()
примера ли?)
Для правил старшинства я использовал http://en.cppreference.com/w/c/language/operator_precedence
Я не знаю о * необходимо *, но я бы все же назвал это хорошей практикой. Что, если кто-то (скажем) добавляет поправочный коэффициент к макросу 'F' для (независимо) нормализации вывода' foo' и забывает добавить скобки? Вы будете тратить много времени, пытаясь понять, что пошло не так. – Linuxios
Также стоит отметить, что таблица приоритетов, которую вы указываете *, на самом деле не является стандартом языка *, а является более простым в использовании представлением более сложных правил в стандарте. Я не юрист или юрист, но эти правила могут изменить ситуацию. – Linuxios