Clearly, there are times where #define statements must have parentheses, like so:
#define WIDTH 80+20
int a = WIDTH * 2; // expect a==200 but a
As Blagovest Buyukliev said:
The define consists of a single token (one operand only, no operators), the parentheses are not needed because a single token (such as 100) is an indivisible atom when lexing and parsing.
But I would recommend the following rules when it comes to macros:
If you want to use function like macros badly consider the following 2 rules:
Why rule 1.? (To keep the order of the operations correct)
#define quad(x) (x*x)
int a = quad(2+3);
will expand to:
int a = (2+3*2+3);
Why rule 2.? (To ensure a side effect is only applied once)
#define quad(x) (x*x)
int i = 1;
int a = quad(i++);
will expand to:
int a = i++ * i++;