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