The preprocessor handles #include, #define, conditional compilation and macro expansion before compilation.
1Macro rules
Always parenthesise macro parameters and the whole body: #define SQ(x) ((x) * (x))
# stringises an argument; ## pastes tokens
Arguments with side effects (SQ(i++)) may be evaluated twice