C Preprocessor
#define MAX(a, b) ((a) > (b) ? (a) : (b))
Rules:
always parenthesize parameters
always parenthesize expansion
beware parameter side effects
see
FAQ 10.1
for more details