我已经尝试了一些C
语言代码,但我遇到了这个问题.
int i=0; i=i+++ ++i; //works fine //i=i++ +++i; gives error
我的困惑是如何i+++
运行?但是+++i
返回错误.
根据"最长匹配"规则解析C运算符.您的第一个示例被解析为:
i = i ++ + ++ i ; i = (i++) + (++i);
而您的第二个示例被解析为:
i = i ++ ++ + i ; i = ((i++)++) + i;
后增量运算符的结果是rvalue,它是增量变量的先前值的副本.将另一个后增量运算符应用于右值是一个错误,因为该运算符需要一个左值,直观地表示诸如i
或*p
可以赋值的表达式.
此外,此代码包含未定义的行为.您正在阅读i
和中间没有修改它序列点 - ,;
,&&
,||
,,
或?:
哪位意味着程序的行为是不可预测的,将整个编译器有所不同.