¿Cómo funciona el preprocesador en C?

¿Por qué es la respuesta para el siguiente código 16? ¿Alguien puede explicar el funcionamiento de este programa?

#define SQUARE(n) n*n
void main()
{
    int j;      
    j =16/SQUARE(2);

    printf("\n j=%d",j);
    getch();
}

Si escribimos el mismo código como abajo, entonces la respuesta es 4:

//the ans is 4 why?
#include<stdio.h>
#include<conio.h>

#define SQUARE(n) n*n

void main()
{
    int j;      
    j =16/(SQUARE(2));

    printf("\n j=%d",j);
    getch();
}

Respuestas a la pregunta(9)

Su respuesta a la pregunta