Кто хорошо знаком с историей C — подскажите, из каких соображений фаза препроцессирования была принципиально отделена от фаз компиляции, с постулированием, по сути, полного отсутствия связей между ними?
Соображениями простоты это объяснить не получается — препроцессор C крайне примитивен, ресурсов для реализации требует мизерных (в сравнении с ресурсами для последующей компиляции).
В то же время, будь там вместо препроцессора нормальный макрогенератор, частично связанный с собственно компилятором (например, по типам выражений/идентификаторов) — можно было бы еще в 70-е малой кровью делать ряд удобных вещей.
С ностальгией вспоминаю макрогенератор ассемблера System/360, воспроизведенный затем в трансляторе автокода БЕМШ для БЭСМ-6.