c 如何处理 +- 系列?

How does c process series of +-?

有人能解释一下c是如何处理+-系列的吗? 例如:

int x = 5, y = 8;

printf("%d\n", x-+-y); /* out: 13 */
printf("%d\n", x-+-+y); /* out: 13 */
printf("%d\n", x-+-+-y); /* out: -3 */
printf("%d\n", x+-+y); /* out: -3 */
printf("%d\n", x+-+-y); /* out: 13 */
printf("%d\n", x+-+-+y); /* out: 13 */

P. S. 我使用 std=c90,所以如果答案不同,请回答所有标准。

x-+-y

这被评估为x-(+(-y))

x-+-+y

这被评估为x-(+(-(+y)))

x-+-+-y

这被评估为x-(+(-(+(-y))))

x+-+y

这被评估为x+(-(+y))

x+-+-y

这被评估为x+(-(+(-y)))

x+-+-+y

这被评估为x+(-(+(-(+y))))


在这种情况下,没有 +- 的并发序列,因此在初始 + 之后的所有 +-- 是一元运算符。