Потому что компиляторы могут создавать макросы. Они делают это постоянно, и это утверждение является частью того, что позволяет им это делать. На самом деле стандарт требует их; существует множество макросов , которые согласно стандарту требуют реализации. К ним относятся __cplusplus
(версия C ++), __FILE__
(имя обрабатываемого файла) и т. Д.