C99标准并且无法理解这一点:
c99 - 6.10.3.3
Semantics
3
---(第二句)
Placemarker preprocessing tokens
是专门处理的:两个地方标记的连接导致单个地标标记预处理标记,以及地标标记的连接
使用non-placemarker preprocessing token
会导致非地标标记预处理令牌。
如果结果不是有效的预处理标记,则行为未定义。
1.What does this `placemarker` and `non-placemarker` term mean exactly?
2.Why the last line says : `undefined behaviour` ?
我已阅读了10多次,但仍然对这些技术名称感到困惑。
任何有关示例和解释的帮助都会对我有所帮助。
答案 0 :(得分:3)
地标标记在前一段(6.10.3.2)中定义:
如果在类似函数的宏的替换列表中,紧跟在前面的参数 或者后跟一个
##
预处理令牌,该参数将被相应的替换 参数的预处理标记序列;但是,如果参数包含否 预处理令牌,参数由 placemarker 预处理令牌替换 代替。 145)
脚注:
145)地标预处理令牌没有出现在语法中,因为它们是临时实体 仅存在于翻译阶段4中。
你引用的最后一行并没有说“未定义的行为”,它说“行为未定义”。我不确定你在这里寻找什么样的答案。它之所以如此,是因为该标准的作者决定如此。