Always put parentheses, ( ), around each constant expression defined by a pre-processor # define directive:
#define BOX_SIZE (3 * 10) /* Size of the box in pixels */
Put ( ) around each argument of a parameterized macro:
#define SQUARE(x) ((x) * (x))
Surround macros that contain complete statements with curly braces:
// A fatal error has occurred. Tell user and abort #define DIE(msg) {printf(msg);exit(8);}
When using the #ifdef / #endif construct for conditional compilation, put the #define and #undef statements near the top of the program and comment them.
Whenever possible, use const instead of #define .
The use of inline functions is preferred over the use of parameterized macros.