The Preprocessor
Every line starting with # is handled by the preprocessor, a separate pass that runs before the actual compiler sees your code. #include <stdio.h> literally pastes the contents of that header file in place; #define SQUARE(x) ((x) * (x)) defines a macro that's textually substituted everywhere it's used, with its argument substituted in — SQUARE(5) becomes ((5) * (5)) before compilation even begins.
#include <stdio.h>
#define SQUARE(x) ((x) * (x))
#define MAX_USERS 100
int main() {
printf("%d\n", SQUARE(5));
printf("%d\n", MAX_USERS);
return 0;
}25 100
Macros aren't functions — they have no type checking and no real parameters, just text substitution — which is exactly why SQUARE(x) is wrapped in extra parentheses: without them, SQUARE(1 + 2) would expand to 1 + 2 * 1 + 2, not (1 + 2) * (1 + 2). No other language on this site has anything like this: it's a genuinely separate, textual layer underneath the actual C language.
Next: bitwise operators — manipulating individual bits directly.
Practice exercise
Define a macro SQUARE(x) that expands to ((x) * (x)), then print SQUARE(9).