«Этапы компиляции» на самом деле не стандартизированный термин. Язык C определяет только то, что называется фазы перевода , в которых подробно описываются различные этапы предварительной обработки, но очень расплывчато в отношении всей работы, выполняемой после предварительной обработки. Он обобщается стандартом в качестве завершающей фазы перевода:
Все внешние ссылки на объекты и функции разрешены. Компоненты библиотеки связаны для удовлетворения внешних ссылок на функции и объекты, не определенные в текущем переводе. Весь такой вывод транслятора собирается в образ программы, который содержит информацию, необходимую для выполнения в среде выполнения.
Это включает оптимизацию и все остальное, что необходимо сделать перед созданием исполняемого двоичного файла. Все детали того, как и когда это сделано, оставляются на усмотрение компилятора, чтобы они могли решить, как им удобно.