Preprocesador de inclusiones para códigos en C++

Este servicio toma un conjunto de archivos fuente con inclusiones entre ellos y emite un código fuente con las inclusiones resueltas. Las líneas con directivas de inclusión no deben contener comentarios.
Este servicio supone que el archivo principal se llama main.cpp. Si se detectan inclusiones circulares se emite un error.

Suponer que cada archivo debe incluirse una sola vez, que no hay inclusiones condicionales y que no hay dependencias del macroprocesador fuera de main.cpp.