In C++, in some contexts, parentheses might change the meaning of the enclosed expression (for the given context). For example, decltype(expr) and decltype((expr)) often yeld different types:
int x;
decltype(x) a=x; // type int; a initialized with a copy of x
decltype((x)) b=x;//type int&; b is a reference to x; extra parentheses matter!
But what about C?
Enclosing macro parameters into parentheses is a common practice in C, can that produce some unexpected side effects?
[edit ]More precisely, if the parentheses are redundant for grouping, may they change program meaning?
I consider only expressions (not other syntactic elements such types, functions parameters lists, etc).