Я думаю, что большинство из вас, кто работал с 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 A B) не может быть выполнена, потому что тогда A будет заменено на B, и конечный результат должен быть таким же для обоих. Но если это не так, то нет никакого способа, чтобы "A x" могло случиться!
Мой вопрос: Что мне не хватает? Очевидно, я не знаю, как именно работает препроцессор. Вы знаете какие-либо источники об этом?