Day 34.
Сегодня ступаем на уровень 5.
Есть такой неофициальный термин, который используется для обозначения токенов в процессе раскрытия макросов препроцессором: blue paint.
Давайте представим такой макрос:
#define A A + 1
A
1. Встречаем
A.2. Добавляем
A в active expansion set (или иначе красим в синий). 3. Заменяем на
A + 1.4. Видим снова
A.5. Но он уже painted blue -> не раскрываем его снова.
Потому получаем
A + 1, а не бесконечную рекурсию. Почему blue?
Насколько я понимаю, в ранних описаниях компиляторов токены буквально красили в разные цвета, что и привело к закреплению такого неофициального термина.
Хотя в стандарте это написано так
If the name of the macro being replaced is found during this scan of the replacement list ..., it is not replaced. Furthermore, if any nested replacements encounter the name of the macro being replaced, it is not replaced. ...
https://eel.is/c++draft/cpp.replace#cpp.rescan-3
@thisnotes. Patreon, Boosty.
Спасибо Artyom Garkavy и niki4smirn.