标题中引用的脚注是什么意思?这是6.10.3p11附加的脚注
如果参数列表中有预处理令牌序列,否则它们将充当预处理指令, 147)行为未定义。
我检查了一下
预处理指令由一系列预处理令牌组成,这些令牌以#预处理令牌开头......
我没有找到匹配该语法的非终端non-directive
。它可以但不必以#
预处理令牌开头。那么我们不得不说以下内容吗?
“尽管名称,预处理指令是非指令。”
此外,该脚注的目的是什么?
答案 0 :(得分:7)
见http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_250.htm这是为了澄清
#define nothing(x) // Nothing /* Case 1 */
nothing (
#nonstandard
)
是UB。
答案 1 :(得分:4)
我的C99副本没有那个脚注(它是原始的 - 你有没有应用TR修正?)但我认为这个想法是,如果你有
# non-directive
在宏参数列表中,仍然是未定义的行为。
最好使< 非指令性>生产包括#
,我认为,它会简化6.10p3,4以及消除这种混乱。