1. #define NUM 10
2. #define FOO NUM
3. #undef NUM
4. #define NUM 20
5.
6. FOO
Когда я запускаю только препроцессор, выходной файл содержит 20.
Однако из того, что я понимаю, препроцессор просто выполняет замену текста. Так что это то, что я думаю, происходит (что, очевидно, неправильно, но idky):
- NUM определяется как 10.
- Поэтому в строке 2 NUM заменяется на 10. Итак, теперь мы имеем "#define FOO 10".
- NUM - undefined.
- NUM переопределяется и теперь составляет 20.
- FOO заменяется в соответствии со строкой 2, которая была до переопределения строки 4 и равна 10.
Итак, я думаю, что результат должен быть 10, а не 20. Может ли что-нибудь объяснить, где оно пошло не так?