¿Por qué no concatenar archivos fuente C antes de la compilación? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

#incluye todos los archivos .cpp en una sola unidad de compilación? 5 respuestas¿Los beneficios / desventajas de la construcción de la unidad? [duplicar] 3 respuestas

Vengo de un entorno de secuencias de comandos y el preprocesador en C siempre me ha parecido feo. Sin embargo, lo he aceptado mientras aprendo a escribir pequeños programas en C. Realmente solo estoy usando el preprocesador para incluir las bibliotecas estándar y los archivos de encabezado que he escrito para mis propias funciones.

Mi pregunta es ¿por qué los programadores de C simplemente no omiten todas las inclusiones y simplemente concatenan sus archivos fuente de C y luego los compilan? Si coloca todas sus inclusiones en un solo lugar, solo tendría que definir lo que necesita una vez, en lugar de en todos sus archivos de origen.

Aquí hay un ejemplo de lo que estoy describiendo. Aquí tengo tres archivos:

// includes.c
#include <stdio.h>
// main.c
int main() {
    foo();
    printf("world\n");
    return 0;
}
// foo.c
void foo() {
    printf("Hello ");
}

Al hacer algo comocat *.c > to_compile.c && gcc -o myprogram to_compile.c en mi Makefile puedo reducir la cantidad de código que escribo.

Esto significa que no tengo que escribir un archivo de encabezado para cada función que creo (porque ya están en el archivo fuente principal) y también significa que no tengo que incluir las bibliotecas estándar en cada archivo que creo. ¡Esto me parece una gran idea!

Sin embargo, me doy cuenta de que C es un lenguaje de programación muy maduro y me imagino que alguien más inteligente que yo ya ha tenido esta idea y decidió no usarla. Por qué no?

Respuestas a la pregunta(10)

Su respuesta a la pregunta