El preprocesado es una fase que comparten algunos lenguajes de programación, anterior a la fase de compilación propiamente dicha. Se aplica generalmente sobre el archivo principal que contiene el código fuente.
La función principal de los preprocesadores es hacer inteligible para el compilador el código fuente, cambiando las directivas de preprocesamiento por valores para el compilador. Estas directivas siempre están señaladas por caracteres especial para que solo sean modificadas por el preprocesador, en el caso del preprocesador de C estas directivas comienzan con "#". Algunos preprocesadores incluso permiten algún tipo de lógica o evaluación muy básica en su gramática.
Otra parte muy importante de los preprocesadores, son los macros, estos están presentes en la mayoría pero algunos no tienen esa capacidad, las macros en C son funciones muy cortas de reemplazo de texto (esto las hace muy inestables y se recomienda no usarlas, ya que el texto que se reemplaza podría generar algún error). En otros lenguajes de programación, las macros son funciones que reciben nodos ast y retornan nodos ast, donde los nodos de ast son instrucciones para el compilador. (cuando se compila un programa, se genera un árbol de expresión, donde cada nodo corresponde a una instrucción, de ahí el nombre "Árbol de sintaxis abstracta" o en inglés "Abstract Sintax Tree" que se abrevia ast)
Ejemplo:
#DEFINE SUMA(X,Y) (X+Y)
Lo que hace este macro es reemplazar las variables x,y por lo que le indiquemos. Ejemplo:
int s = SUMA(2,3);
Después del preprocesamiento el código queda:
int s = (2+3)
Finalmente el compilador hace la verdadera suma, ya que las macros no se podrían considerar por verdaderas funciones, porque solo remplazan valores.
En realidad este macro es inútil, pero es una buena forma de explicar los macros.
Estos ejemplos de macros se basan en el preprocesador de C, pueden variar con otros preprocesadores
Algunos otros preprocesadores son capaces de comprobar errores de sintaxis en el código antes de pasar a la etapa de compilación, incluso detectar dependencias con otros archivos para evitar muchos problemas.