# Macros & Conditional Compilation — C Programming

Source: https://www.geekswithgeeks.com/en/c/c-macros

> Text substitution before compilation even starts.

## #define is a text swap

The **preprocessor** runs before the compiler and blindly replaces macro names with their text — no type checking happens at this stage.

## Object-like and function-like macros

Wrap macro parameters in parentheses to avoid operator-precedence bugs.

```c
#define MAX_SIZE 100
#define SQUARE(x) ((x) * (x))

int arr[MAX_SIZE];
printf("%d\n", SQUARE(3 + 2)); // 25, not 11
```

Output:

```
25
```

## #ifdef for conditional code

Code inside `#ifdef` blocks is only included by the preprocessor if the macro is defined — common for debug logging or platform-specific code.

```c
#define DEBUG

#ifdef DEBUG
    printf("debug: x = %d\n", x);
#endif
```
