Macros allow code to be substituted before compilation by replacing text. During preprocessing:
1) Macros find and replace text without evaluating code.
2) Macro arguments are substituted but not evaluated.
3) Unintended side effects can occur from operations inside macros.