Думаю, большинство из вас, кто работал с C / C ++, имеют интуитивное представление о том, как работает препроцессор (более или менее). Я так думал до сегодняшнего дня, но моя интуиция не оправдалась. Вот такая история:
Сегодня что-то пробовал, но результат не могу объяснить. Сначала рассмотрим следующий код:
#define A B
#define B A
A
B
Что происходит? Что ж, результат после компиляции с флагом -E следующий:
A
B
Хорошо, хорошо, может быть, не то, что кто-то ожидал, но это объяснимо. Я предполагаю, что препроцессор каким-то образом определил, что есть какая-то проблема, и ничего не сделал.
Следующее, что я попробовал, было следующее:
#define A B
#define B A C
#define C x
A
B
Теперь к необъяснимому для меня результату:
A x
B x
Как это произошло? Я не могу понять разумного способа, как это произошло. Первая команда (#define AB) не может быть выполнена, потому что тогда A будет заменено на B, и окончательный результат должен быть одинаковым для обоих. Но если это не так, то «A x» не может произойти!
Мой вопрос: что мне не хватает? Очевидно, я не знаю, как именно работает препроцессор. Известны ли вам какие-либо источники об этом?