int x = 2;
int y = 5;
int z = x +++ y;
printf("%d",z);
VC ++和GCC都提供7作为输出。我的困惑在于,它可能是x ++ + y或x + ++ y。这定义了吗?
答案 0 :(得分:7)
在C和C ++中,词法分析的原则是,可以形成有效令牌的最长字符序列被视为一个(也称为“最大蒙克”)。因此,x+++y
被明确地解析为(x++) + y
。
2.4 /(3.3) - 否则,下一个预处理令牌是可构成预处理令牌的最长字符序列,即使这会导致进一步的词法分析失败。
答案 1 :(得分:6)
根据最大munch规则编译器始终将x +++ y
解释为x++ + y
,因此行为已明确定义。
P(4)
如果输入流已被解析为预处理标记,直到给定字符,则下一个预处理标记是可构成预处理标记的最长字符序列。[...]
P(6)
示例2程序片段
x+++++y
被解析为x ++ ++ + y
,这违反了增量运算符的约束,即使解析x ++ + ++ y
可能产生正确的表达式。