LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: bluespirit

有意思的i=i++的问题

[复制链接]
发表于 2007-4-14 12:53:03 | 显示全部楼层
Post by bluespirit
楼上火气蛮大的. 我本来就是新手呀.只是觉得好玩才发出来的.我倒没说我是高手之类的. 听口气,您到是高手呀.


倒没有这个意思。只是像这种行为未定义的代码已经被反复讨论过 N 遍了,一次又一次的看到有点烦罢了。

Post by bluespirit
我觉得至少这样的一个问题能引想别人了解编译内部实现的问题,人总是要知道所以然的. 不能说,因为不规范就不去了解吧. 像这个问题,只有了解了,才能避免获得不想要的结果. 


其实像这种行为未定义的代码,由于标准未指定其确切的行为,各个编译器在实现的时候可以自由发挥,探讨其实现实在没多大意思。

当然,如果这种问题最终能引导发问者去了解编译器的实现,固然是好事。但我觉得如果提问的人在发贴之前能先在网上搜索一下前人的讨论,那就更完美了。相信他/她在那里能发现更多有价值的信息,例如说 C 邮件列表中的 FAQ:

http://www.faqs.org/faqs/C-faq/faq/

请参看上述 FAQ 第三节(Section 3. Expressions)的问题及解答(并特别注意其参考资料)。值得注意的是,问题 3.3 就是楼主提的。
回复 支持 反对

使用道具 举报

发表于 2007-4-14 14:16:51 | 显示全部楼层
这种题在面试的时候最喜欢被问了.
回复 支持 反对

使用道具 举报

发表于 2007-4-14 18:26:02 | 显示全部楼层
Post by scutan
这种题在面试的时候最喜欢被问了.

估计面试者想确认下你能否识别出来这么做是不妥的 :-)
回复 支持 反对

使用道具 举报

发表于 2007-4-14 20:48:10 | 显示全部楼层
这种代码确实没有研究的必要。
研究编译器的实现,更是没谱。最多只能说你在某某编译器的某个版本下得到了验证的结果。

说没有研究的必要,是强调,在精力有限的情况下,可以使用在别的地方。

好奇心和转研探讨精神还是值得鼓励的。
回复 支持 反对

使用道具 举报

发表于 2007-4-15 12:47:34 | 显示全部楼层
不同编译器,解释代码从右从左不一样。c/c++都没有规定,所以要看编译器实现。就像上面有人说的,应该避免这个,在程序设计的时候
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表