Dlaczego tak
Preprocesor najpierw wykonuje dyrektywy #include i #define, wklejając pliki nagłówkowe i rozwijając makra. Następnie kompilator tłumaczy każdą jednostkę na plik obiektowy z kodem maszynowym, a konsolidator łączy pliki obiektowe i biblioteki w jeden plik wykonywalny, rozwiązując odwołania między nimi. Kompilacja przed preprocesorem jest niemożliwa, bo kompilator nie zna jeszcze deklaracji z dołączanych nagłówków.