CCoding Style - Parenthesize the macro body and arguments2
From EdWiki
Parenthesize the macro body and arguments ...
Even Parenthesizing the macro properly doesn’t address the multiple evaluation problem.
#define max( x, y) ( (x) > (y) ? (x) : (y) )
And it is invoked as
max( i++, j++ )
Will increment the larger value twice.