繁体   English   中英

为什么我+++可以正常工作,但+++ i却给出错误?

[英]Why i+++ works fine but +++i gives error?

我已经尝试过用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 ,它是已递增变量的先前值的副本。 将另一个后递增运算符应用于rvalue会出错,因为该运算符需要一个lvalue ,直观上讲 ,该表达式可以分配给i*p

另外,此代码包含未定义的行为。 您正在阅读i并对其进行修改,而没有插入中间的序列点 - ; &&|| , ,或?:哪位意味着程序的行为是不可预测的,将整个编译器有所不同。

这两个语句均产生未定义的行为。 但是,第一个可以正常工作的原因是因为编译器将其解释为(i++)+ ++i; ,而第二行是i++ ++(+i) ,这没有任何意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM