Es un programa que se utiliza antes de la llamada al compilador, preparando el código fuente para que este pueda ser traducido a código máquina. Para ello, va a interpretar lo que se conocen como directivas del preprocesador, haciendo referencia a aquellas lineas que comienzan por #.

Es importante saber que, aunque estas directivas formen parte del programa, al traductor de código fuente a código binario no le llegan ni estas directivas ni los comentarios. Esto se debe a que el preprocesador ha interpretado previamente dichas directivas y ha realizado la tarea asociada a las mismas.
Por ejemplo, al utilizar la directiva #include, esta siempre debe ir acompañada de un fichero. Así, el preprocesador remplazará la línea en la que se encuentra la directiva #include por todo el contenido del fichero que especifica. Sin embargo, esta no es la única directiva, pudiendo encontrar otras como #define, #ifdef o #else.
Para seguir aprendiendo…
UC3M: El preprocesador
Wikipedia: Preprocesador de C
Linux Terminal: man cpp (preprocesador predeterminado de C).