Regras de escopo para macros C

Eu não sou muito de um programador C, mas eu estava sob a suposição de que as macros C eram quase uma espécie de localizar e substituir recurso onde o pré-processador leva a definição de macro e coloca onde quer que veja o nome da macro.

Este é o exemplo do Dragon Book de regras de escopo dinâmico e como elas se aplicam a macros:

#define a (x + 1)

int x = 2;
void b () { int x = 1; printf("%d\n", a); }
void c () { printf("%d\n", a); }
void main () { b(); c(); }

Eles também discutem como as regras de escopo dinâmico se aplicam ao nomex dentro da macroa. Eu estava sob a suposição de que seria basicamente substituira com(x + 1) e então compilar o programa e assim as regras de escopo seriam exatamente as mesmas que se você tivesse escrito(x + 1) ao invés dea (o que seria regras de escopo estático).

Alguém poderia esclarecer isso?

Edit: Livro referido é Compilers: Princípios, Técnicas e Ferramentas Segunda Edição. O exemplo citado é das páginas 31-32.

questionAnswers(3)

yourAnswerToTheQuestion