读书人

i++ + i++的意思

发布时间: 2013-02-27 10:48:11 作者: rapoo

i++ + i++的意义
看了“[置顶] [推荐] C,C++表达式求值顺序 裘老的解释。 [问题点数:300分]”帖子,也说两句。

1、这个东西,教师需不需要讲?很多跟帖说“讨厌这些毫无意义的东西”。这是一个误解。当你的老师讲解这些东西时,当用人单位考这个东西时,他们希望你知道:在C/C++ 语言中,由于没有规定上述表达式的求值顺序,因而你不得写那些代码——而不是相反。

2、如果问你语法和语义的区别, i++ + i++就是一个很好的例子。应该没有人说“语法和语义的区别”毫无意义吧。

3、i++ + i++这个东西无定义,意味着编译器可以自由的处理。因而此时“迷信编译器、调试器、运行结果”都是错误的认识。你无法穷尽所有的编译器、调试器以保证你的语意正确执行。

4、副作用是一个重要而又常用的概念。不要倒洗澡水把澡盆中的小孩子也泼了。
5、该帖子的核心在最后。
“这里讨论的是语言,而不是某个实现...后记:去年参加一个学术会议,看到有同行写文章讨论某个C系统里表达式究竟按什么顺序求值,并总结出一些“规律”。从讨论中了解到某“程序员水平考试”出了这类题目。这使我感到很不安...发现许多专业课教师也对这一基本问题也不甚明了,更觉得问题确实严重。
后后记:4年多过去了,许多新的和老的教科书仍然在不厌其烦地讨论在C语言里原本并无意义的问题(如本文所指出的)。希望学习和使用C语言的人不要陷入其中。”
[解决办法]
i++ + i++的意思
[解决办法]
i++ + i++的意思
[解决办法]
“迷信编译器、调试器、运行结果”都是错误的认识
[解决办法]
语言当然有规则,但高级语言与低级语言的转换规则只能大概的一致,其中个别由于不同的工具会有不同的结果,这些其他没什么好谈的,只要以经验绑定说明就好了。

但现在很多教课书,作者都不明所以,以自身的经验来代替规则,没有背景的胡乱说明,这个才是可恶的。
[解决办法]
话说这种代码 会有人写吗
[解决办法]
i++ + i++的意思
[解决办法]
这种写法本身可读性就不高
维护起来也比较麻烦
不符合代码规范
[解决办法]
这是很多新手易困惑的问题之一。

[解决办法]
为什么不加括号呢~~~ 该~~~
[解决办法]


[解决办法]
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

不要写连自己也预测不了结果的代码!

[解决办法]
对于1,个人感觉,如果学生都很优秀的话,可以讲讲。不然的话,讲了也是白讲,听也听不懂,也没人听。至少我读书时,肯定不会听这么多的。
同意lz后记里说的,把这i++ + i++放考题里,真坑爹。而且不少这类考题还是个单选题,给4个数字。
[解决办法]
我刚才的回帖呢。。 怎么不见了
------解决方案--------------------


不写编译器,不研究语法/语义,不以编译器或者类似编译器的东西作为项目目标,这种东西的意义,是不大的。
(希望以研究这种东西,从而达到“悟道”,也是不现实的)

[解决办法]
这种东西 一般都敲入代码 让编译器编译下 然后选择结果i++ + i++的意思
[解决办法]
原来如此 。。。
[解决办法]
这里要注意。。。。
[解决办法]
i++,先试用,后自加,
++i,先自加,再试用,
呵呵
[解决办法]
It's undefined behavior because C++ standard doesn't describe a way to do it. And it works on all c++ compiler, so it's just compiler implementation behavior.

读书人网 >C++

热点推荐