a3 = --a1+++a2;

wangyangcheng 2004-08-05 12:47:45
#include <stdio.h>
int main()
{
int a1 = 1,
a2 = 2,
a3;
a3 = --a1+++a2; //报C2105: '--' needs l-value,我觉得有左值呀?
//a3 = --a1+ ++a2; 则可以过,为什么?
return 0;
}
...全文
209 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
antijpn 2005-09-09
  • 打赏
  • 举报
回复
说的根本就没到点子上,这个贴要是也能入FAQ的话,C语言的BZ就可以自杀去了……

并非因为++优先级高于+所以要先++,这个是编译器的贪心原则决定的,连续三个加号会被编译器分析为++ +两个词法单元,这样的话就造成了--a++这样的一个子表达式,对于这个表达式,在C中必然产生l-value required的错误,无关于前置和后置操作符的优先级(在C++里面如果先调用了前置操作符的话就不会有l-value required的问题了)
steel007 2004-08-05
  • 打赏
  • 举报
回复
对于可能出现疑虑的这种代码,还是加上括号表明自己的用意为好。
FlyindanceDDr 2004-08-05
  • 打赏
  • 举报
回复
你为什么一定要研究这种毫无意义的问题呢?不同的编译器有不同的处理方法,研究这种问题纯粹是浪费时间
imwj 2004-08-05
  • 打赏
  • 举报
回复
哥们,你在看哪本书哦
findstone 2004-08-05
  • 打赏
  • 举报
回复
我也绝得深究这些问题意义是在不大,还是多花点时间干点别的事情吧。
binjuny 2004-08-05
  • 打赏
  • 举报
回复
记住以后不要这样写了。,若你养成这样的习惯,读的人会累 ̄ ̄ ̄___ ̄ ̄ ̄ ̄ ̄
fengfeng1982 2004-08-05
  • 打赏
  • 举报
回复
这种问题我想应该是教材上才有,是测试读者的分析能力。一般正式的程序中不太会出现令人糊涂的表达式。因为这会给自己,别人读程序造成麻烦,还容易出错。
hongweijin 2004-08-05
  • 打赏
  • 举报
回复
是啊,在校园里遇到这样的问题,绝非偶然啊!
postage 2004-08-05
  • 打赏
  • 举报
回复
多个操作符作用于同一对象时,后增后减只能最后一个起作用,只是有些编译器会自动修正这个错误罢了,现在怎么老有人钻这牛角。
  • 打赏
  • 举报
回复
编译器大概对a1的这种--a1++运算不识别,不支持,所以报错。加上()就好了。
FlyindanceDDr 2004-08-05
  • 打赏
  • 举报
回复
增加括号不影响程序效率
  • 打赏
  • 举报
回复
如果写成a3=--a+(++a2);应该能通过,效果应该与a3 = --a1+ ++a2;相同吧。
  • 打赏
  • 举报
回复
a3 = --a1+++a2; //报C2105: '--' needs l-value,我觉得有左值呀?
//a3 = --a1+ ++a2; 则可以过,为什么?
很简单:因为++运算符号级别高于+ 所以先进行++的运算。即
对于a3 = --a1+++a2;实际运算为 a3 = ((--a)++)+a2;即先算--a之后算(--a)++,再之后是+a2.而不是a3=--a+(++a2);
而a3 = --a1+ ++a2;有空格分隔开第一个+与后面的两个++,所以编译器识别出来没有报错。
liubingqian 2004-08-05
  • 打赏
  • 举报
回复
有空还是歇会儿吧!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧