The preprocess-compile-assemble-link pipeline explains most C build mysteries: why headers need include guards, what 'undefined reference' means, and what make actually parallelizes. Build systems from Make to Bazel, and tools like ccache and distcc, are engineered entirely around the stages you dissect here.