3

C99 标准并且难以理解:

c99 - 6.10.3.3  
Semantics 
3

---(第二句)

Placemarker preprocessing tokens被特别处理:两个placemarker 的连接产生一个placemarker 预处理令牌,一个placemarker 与non-placemarker preprocessing token非placemarker 预处理令牌的结果连接。

如果结果不是有效的预处理标记,则行为未定义。

1.What does this `placemarker` and `non-placemarker` term mean exactly?
2.Why the last line says : `undefined behaviour` ?

我已经阅读了 10 多次,但仍然对这些技术名称感到困惑。

任何有关示例和少量解释的帮助都会对我有所帮助。

4

1 回答 1

4

Placemarker 令牌在前一段 (6.10.3.2) 中定义:

如果在类函数宏的替换列表中,参数紧跟在##预处理标记之前或之后,则将参数替换为相应参数的预处理标记序列;但是,如果参数不包含预处理标记,则该参数将替换为地标预处理标记。145)

和脚注:

145) Placemarker 预处理标记不会出现在语法中,因为它们是仅存在于翻译阶段 4 中的临时实体。

您引用的最后一行没有说“未定义的行为”,而是说“行为未定义”。我不确定你在这里寻找什么样的答案。之所以这么说,是因为标准的作者如此决定。

于 2012-11-26T12:25:43.370 回答