Самая ранняя работа над языком, которая через несколько лет получит имя "C" , началась в 1969 на основе языка BCPL . Препроцессор ожил в 1972 году .
C в то время все еще находился в процессе разработки, поэтому мы можем сказать, что препроцессор существовал с самого C. Никогда не было компилятора C без препроцессора. . C ++ ожил после C, и с самого начала у него был препроцессор.
Неважно, если препроцессор был отдельным исполняемым файлом, чем компилятор, но обычно он является частью компилятора. И никаких IDE в то время не было.
Вот ссылка , где вы можете прочитать больше. Это часть про препроцессор:
Многие другие изменения произошли в 1972-3 годах, но самым важным было введение препроцессора , частично по настоянию Алана Снайдера [Snyder 74], но также и в признание полезности механизмов включения файлов, доступных в BCPL и PL / I. Его оригинальная версия была чрезвычайно простой и содержала только включенные файлы и простые замены строк: #include и #define макросов без параметров. Вскоре после этого он был расширен, главным образом Майком Леском, а затем Джоном Рейзером, для включения макросов с аргументами и условной компиляцией. Препроцессор изначально считался необязательным дополнением к самому языку. Действительно, в течение нескольких лет он даже не вызывался, если исходная программа не содержала специального сигнала в начале. Такое отношение сохранялось и объясняет как неполную интеграцию синтаксиса препроцессора с остальным языком, так и неточность его описания в ранних справочных руководствах.