Как работает макрос препроцессора?

#define B 100+B
main()
{
    int i= B;
}

Я знаю, что это неправильно, но просто из любопытства, когда я его компилирую, я получаю эту странную ошибку:

"B was not declared in this scope".

Почему это так?Если эта ошибка была вызвана тем, что компилятор удаляет макрос после его замены, то как следующий код работал нормально, когда B должен был быть удален до того, как он стал доступным для A ?

#define B 100
#define A 100+B
main()
{
    int i= B;
    int j =A;
}
6
задан Brian Tompsett - 汤莱恩 17 April 2016 в 20:58
поделиться