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.