The C Preprocessor
A text-substitution engine that runs before compilation. #include pastes file contents, #define creates macros, #ifdef/#ifndef enable conditional compilation. Function-like macros (#define MAX(a,b) ((a)>(b)?(a):(b))) require careful parenthesization to avoid operator precedence bugs. Macro pitfalls: double evaluation of arguments, no type checking, unhelpful error messages. X-macros are a power pattern: define a list of items with a macro, then #define that macro differently in different contexts to generate enums, strings, switch cases from one source of truth.