Язык макросов препроцессора C отличается от C
; в определении макроса следует удалить.
Это понятная ошибка. Если бы C был разработан сегодня, макроязык мог бы быть более интегрированным с остальной частью C.
Но на 16-битных машинах в начале 1970-х годов, когда был изобретен C, было неразумно писать слишком сложную программу. Это закончится бесполезно, так как на самом деле не останется памяти, чтобы на самом деле запустить программу большого шедевра, и даже простые программы работали медленно.
Таким образом, C был разбит на довольно простой макрос-препроцессор, который изначально был совершенно отдельной программой и собственно компилятором. Программа препроцессора не пыталась выполнить синтаксический анализ языка C, кроме понимания модели лексического анализа.
Когда 32-битные машины вступили во владение, препроцессор обычно был интегрирован в синтаксический анализатор, но, естественно, язык должен был оставаться прежним.