免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: syoubin_sai
打印 上一主题 下一主题

[C] 请教C语言牛人----关于int与unsigned int的奇怪问题 [复制链接]

论坛徽章:
0
91 [报告]
发表于 2010-06-14 04:29 |只看该作者
回复  没本

也许是因为汇编在你看来并不高深, 所以其实也没有违反你总结的方法?
...
OwnWaterloo 发表于 2010-06-14 03:58


汇编或者机器指令,本来就是最简单直接的吧,难道你认为汇编会比C++还复杂?而且请注意我是对利用编译器产生的汇编进行调试查错而已。高级语言的检查和防错是任何合格程序员必备的技能,这个无需强调。但编译器并不总是生成你想要的结果。调试时检查汇编代码和使用高级语言进行程序设计之间并无冲突,也没有人会浪费时间对明显没有bug的代码检查汇编。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
92 [报告]
发表于 2010-06-14 05:06 |只看该作者
本帖最后由 OwnWaterloo 于 2010-06-14 05:12 编辑

回复 91# 没本

------ ------ ------ 对解决实际问题 ------ ------ ------

根本不需要如此费事的去研究汇编代码如何如何。

C语言不是没有留后路。 它还是留有无符号数来解决这个问题的。
使用确定契约去编程, 省事省时省心, 通常也无伤效率。


研究了又能怎样呢?
换一个优化选项、换一个版本、 换一个编译器、 换一个平台, 然后继续研究?
然后
#ifdef
#elif



最终得到的结论是什么?
难道真的是使用有符号整数, 并且对不同优化选项、版本、编译器组合、平台作条件编译?

这种复杂度是谁都受不了的, 通常还是能用无符号数。


------ ------ ------ 对兴趣爱好 ------ ------ ------

确实,  不研究汇编, 可能就不明白为什么有符号数这么无常, 不能做到知其然并知其所以然。
例如没研究汇编之前, 我不敢说自己明白数组和指针有什么区别。
这可能是唯一一个我用汇编才想明白的C特性。

但这个精力, 花在"使用无符号数却错了, 可以给编译器报告bug了"上更有意义。


同时也因为汇编, 还导致我一开始将C++的虚表误解为数组。
最终还是在CU上接受了教育, 从C代码的方式解开了这个误解。
我敢说大部分通过汇编去研究C++虚表的人, 都存在过, 且依然存在这个误解。

所以, 这方法并不总是有效的。


------ ------ ------ 指导后辈 ------ ------ ------

以我自身的经验: 是否能用好C/C++, 和是否了解汇编, 是不相干的事。
对初学者, 通过汇编去学习反而有害。

程序员要经过相当长的一段时间才能认识到绝大部分编程活动都是依赖契约的
用汇编去解释C, 会让程序员产生"自以为知晓一切, 所以可以任意妄为"的错觉。
"反正, 无论我怎样写, 最终我都可以通过汇编代码把bug修复"。

也就更晚才能体会到"编程是需要接受束缚", 以及用更明确的契约去编程。

论坛徽章:
0
93 [报告]
发表于 2010-06-14 06:56 |只看该作者
本帖最后由 guoruimin 于 2010-06-14 07:03 编辑

有时候看汇编是为了看C代码写的对不对!
比直接写一堆测试代码省劲多了。
有时候看汇编是为了验证遗忘的优先级!
只看C标准,不明了、不踏实。

#define offsetof(s, m)        (size_t)&(((s *)0)->m)
#define container_of(p, s, m) (s *)((char *)p - offsetof(s, m))
像这一类的宏,不用汇编走一遍,我是不会直接用的。

请不要误导新人,不理解汇编,就不可能精通C!
出了问题,自己看汇编绝对是把锋利的匕首!
糊弄过你的大神如有丰富的出错经验,可以帮你看,但不能时刻跟着你!
搞不好来个 “未定义行为” 了之,项目就无需进行了,皆大欢喜!

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
94 [报告]
发表于 2010-06-14 07:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
95 [报告]
发表于 2010-06-14 07:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
96 [报告]
发表于 2010-06-14 07:36 |只看该作者
本帖最后由 guoruimin 于 2010-06-14 07:56 编辑
能把OwnWaterloo拖进来,听听OwnWaterloo精彩的议论,不虚此行
pmerofc 发表于 2010-06-14 07:07


OwnWaterloo 的水平是可以肯定的,每个人都有自己的成长历程吧!
我的习惯是,C代码拿不准的地方,直接用汇编调试一遍。
觉得这个方法比写C代码验证C更节省时间。

我还是认为,不懂汇编,就无法精通C!
估计谁也说服不了谁,谁说服谁并不重要,就怕误导新朋友。
看了要投个票了!

题目是:使用C语言,要不要了解汇编?
http://bbs.chinaunix.net/thread-1721853-1-1.html

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
97 [报告]
发表于 2010-06-14 08:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
98 [报告]
发表于 2010-06-14 10:59 |只看该作者
我在VC6上运行,全部输出:
7fffffff
80000000
ok

论坛徽章:
0
99 [报告]
发表于 2010-06-14 11:03 |只看该作者
在VC2008上运行,全部输出:
7fffffff
80000000
ok

论坛徽章:
0
100 [报告]
发表于 2010-06-14 11:08 |只看该作者
在VC2010上运行,全部输出:
7fffffff
80000000
ok
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP