a+++++b的含义是什么?

qudongtianxia 2011-07-17 03:42:14
请大家看一看 这个表达式的含义是什么?
...全文
576 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
GhostFromHeaven 2011-07-20
  • 打赏
  • 举报
回复
a+++++b

以此分析
a不行
a+不行
a++可以(a++)
(a++)+不行
(a++)++可以((a++)++)
但是a++是右值(常量),不能做++运算,出错。




这样的代码不管是否正确,都绝对不允许在程序中出现的。
桃子 2011-07-20
  • 打赏
  • 举报
回复
这个应该看具体的编译器吧...

编译原理的词义解析的时候,看编译器怎么做处理...
ningweidong 2011-07-20
  • 打赏
  • 举报
回复
讨论这个问题有意思吗,不同的编译器,执行起来不一样
flysnowhite 2011-07-20
  • 打赏
  • 举报
回复
这是个错误。在C 的缺陷与陷阱有介绍。
AnYidan 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 khan102 的回复:]

to qudongtianxia:
从贪心法的角度看应该是((a++)++)+b而不是(a++)+(++b);
[/Quote]

C 的缺陷与陷阱
寒沙胜雪 2011-07-18
  • 打赏
  • 举报
回复
这个问题 还是值得研究的。。 可现在真是不知道咋说呢。
vipvvv 2011-07-18
  • 打赏
  • 举报
回复
这样的代码是跟编译器有关系的,所以在编写程序的时候尽量不要出现这种表达式。
gohome520 2011-07-18
  • 打赏
  • 举报
回复
我表式很蛋疼,这样的语句,除了用来装X和SB面试外,还能用来干什么?
axx1611 2011-07-18
  • 打赏
  • 举报
回复
月经贴……鉴定完毕
孤舟 2011-07-18
  • 打赏
  • 举报
回复
表达式是错的
a++返回的值不能被作为左值 所以后面的++编译不过的
Jxiaoshen 2011-07-18
  • 打赏
  • 举报
回复
(a++)+(++b)
++结合性是从右至左,+结合性是从左至右,应该这么理解吧
huangzs10 2011-07-18
  • 打赏
  • 举报
回复
谁写的这式子,拉出去埋了
wonder521 2011-07-18
  • 打赏
  • 举报
回复
直接就编译不过去,这个式子是错误的。
三岔口 2011-07-18
  • 打赏
  • 举报
回复
引用17楼
((a++)++)+b
正确!!!!
由于词法中的贪心法原则。
贪心原则:
每个符号应该包含尽可能多的字符
第一个+后面是+因此包含为++;后面类推
一句话说不清楚,C语言陷阱与缺陷有完整介绍哦!!!

那我用gcc为什么编译不过去啊


正因为编译器将此表达式解释为((a++)++)+b才会编译不过去,如果解释为(a++)+(++b)就能编译过去了,因为++要求操作数是可修改的左值,而a++的结果是一个右值,因此编译错误。

楼主,这种东西没啥意思,没用
赵4老师 2011-07-18
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。

不要写连自己也预测不了结果的代码!
小瘪三开发者 2011-07-18
  • 打赏
  • 举报
回复
这尼玛学校的试卷里面才有这种东西吧
WarriorKing 2011-07-18
  • 打赏
  • 举报
回复
这种表达式在VC和VS都是错的,我原来看C++ primer时候做过实验
FrankHB1989 2011-07-18
  • 打赏
  • 举报
回复
这个表达式在标准里面本身就是例子……
ISO C++ 6.4:
6 EXAMPLE 2 The program fragment x+++++y is parsed as x ++ ++ + y, which violates a constraint on increment operators, even though the parse x ++ + ++ y might yield a correct expression.
所以不取决于编译器,行为都应该是一致的。
在词法解析和语法解析阶段给出相同结果,然后在++的语义检查中产生错误。
hua_zhixing_ 2011-07-18
  • 打赏
  • 举报
回复
吃多了感觉肚子撑就拿来消遣消遣,哈哈……
enyblock 2011-07-18
  • 打赏
  • 举报
回复
VC的话ALT+8自己用汇编跑一下就知道了,看下结果,编译器不同,有时会不同的,不要太迷信书,自己实践最重要。如果实践了你就会知道,那个表达式 VC下报错。表达式不符合要求
加载更多回复(27)

69,371

社区成员

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

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