C如何解析这句话?

时间:2011-09-15 13:15:18

标签: c puzzle

根据C语言的官方说明,将返回什么号码?

int a, b;
a = 5;
b = a+++++a;
return b;

1 个答案:

答案 0 :(得分:5)

它被解析为:

b = (a++)++ + a;

这是一个无效的表达式。增量运算符不能应用两次,因为(a++)不是左值。

标记生成器不支持上下文,并且可能匹配最长的标记,因此它不会被解析为语法上有效的a++ + ++a。 (但这仍然是无效的代码,因为它修改了a两次而没有一个调用未定义行为的序列点。)