C ++ 03标准中有一个与预处理器宏替换相关的段落:
16.3.4重新扫描和进一步更换
如果在此扫描期间找到要替换的宏的名称 替换列表(不包括源文件的其余部分 预处理令牌),它没有被替换。 此外,如果有任何嵌套 替换遇到要替换的宏的名称,但事实并非如此 更换。这些未替换的宏名称预处理标记是否定的 更长的可用于进一步更换,即使它们以后 (重新)在宏名称预处理令牌的上下文中进行检查 否则就会被替换。
突出显示的句子是什么意思?首先,标准从未定义术语" 嵌套替换"。此外,如果嵌套替换意味着下面给出的例子
#define a b
#define b c
#define c d
#define d a b e
#define e m
a // expanded to "a b m"
哪一个是被替换的宏的"名称"(注意使用单数名词)?因为此处a
被替换为b
然后被c
替换为d
然后被替换为a b m
,并且有> 1个宏被替换并且a
1}}& b
是以前遇到的宏的名称。但显然标准不是使用复数名词,所以它不应该同时指a
和b
。
有人可以澄清本段的含义。