如何解释与宏替换有关的C ++标准的这一段

时间:2014-03-19 10:06:57

标签: c++ c-preprocessor language-lawyer

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是以前遇到的宏的名称。但显然标准不是使用复数名词,所以它不应该同时指ab

有人可以澄清本段的含义。

0 个答案:

没有答案