Macro replacement lists should be parenthesized to protect any lower-precedence operators from the surrounding expression. See also PRE00-C. Prefer inline or static functions to function-like macros - CERT Secure Coding Standards and PRE01-C. Use parentheses within macros around parameter names - CERT Secure Coding Standards.
...
This compliant solution violates PRE00-C. Prefer inline or static functions to function-like macros - CERT Secure Coding Standards. Consequently, this solution would be better implemented as an inline function.
...