我不是一个 C 程序员,但我假设 C 宏几乎是一种查找和替换功能,预处理器获取宏定义并将其放在看到宏名称的任何地方。
这是 Dragon Book 的动态范围规则示例以及它们如何应用于宏:
#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(); }
他们还讨论了动态范围规则如何应用于x
宏中的名称a
。我假设它基本上会替换a
为然后编译程序,因此范围规则将与您编写的而不是(x + 1)
完全相同(这将是静态范围规则)。(x + 1)
a
有人可以澄清一下吗?
编辑:所指的书是编译器:原理、技术和工具第二版。引用的示例来自第 31-32 页。