打印

大家来看林锐在高质量C++编程指南的又一个问题--zt

[复制链接]
1973|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
high|  楼主 | 2007-3-26 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://community.csdn.net/Expert/TopicView3.asp?id=4974540

大家什么意见?呵呵。个人觉得crt的做法是可以接受的,国内面试官太呆板了!(我也吃过这个亏)

1  这样符合c语言设计的哲学,即程序员所做的都是对的。(c是高度灵活的)。
2  高效考虑,越是底层越要求高效,因为被执行的次数是最多的。何苦每次都来一次判断?
3  而且也符合“契约”精神。(既我们有默契,我认为你给我的参数都是正确的,你对你自己接口负责。)
4  从理论考虑,防御编程是近乎无止境和不完美的。说一个极限的例子:你就算把所有情况考虑完了,要是来一个辐射把数据扰乱了?就算你连这也防御了,来一个外星人把0,1全部反了怎么办?(你不能证明没有外星人,而你的防御编程总是会有漏洞)

相关链接:http://community.csdn.net/Expert/TopicView3.asp?id=4974540

相关帖子

沙发
IceAge| | 2007-3-26 21:43 | 只看该作者

assert 可以说在windows编程下是必须的,良好的习惯之一

char* strcpy(char*strDest,const char*strSrc)这道题作为考试标准,并不恰当,更不用说还有什么标准答案。这个函数并不安全,可以被用作溢出式攻击。

使用特权

评论回复
板凳
mohanwei| | 2007-3-26 22:19 | 只看该作者

assert我在C51里也用的很多,呵呵

使用特权

评论回复
地板
_SPARTAN| | 2007-3-27 09:29 | 只看该作者

有空多读读书吧

《编程精粹》中有很清楚的阐述,学C的人,应该看看这本书。

断言 和 错误处理 是两个不同的概念,区别在于它们所针对的 错误来源 不同。

ASSERT是仅存在于DEBUG版的,在RELEASE版中是没有的,它是用于预防“程序员的错误”,在产品的开发阶段起作用,是软件工程的一部分;

“错误处理代码”是RELEASE版本的一部分,用于处理“来自系统外部输入的错误”,如用户的不正确输入,线路上的误码,严格来说,宇宙射线应该归属于这一类错误;

另外,不论是断言,还是错误处理,其覆盖能力都是有限的,比较实际的考虑,是用20%的手段覆盖80%的问题可能,就可以了。没有十全十美的东西。

使用特权

评论回复
5
陈双君| | 2007-3-27 10:12 | 只看该作者

有道理有道理。

有道理有道理。说得不错,我也是这么想的,有好多事情都是大家有目共识的,就用不着这样那样的做出什么乱七八糟的判断了。

使用特权

评论回复
6
high|  楼主 | 2007-3-27 11:39 | 只看该作者

很遗憾,你们没有碰到这样的问题吗?

4楼说的非常正确!

我清楚assert在debug 和 release下区别,我一般是看代码。库里面有assert.h, assert是宏实现的可以自己控制。
但我还是同意您观点。虽然我的原意思是说明防御编程。

----
此外:
1,我自己情况:我碰到这样的问题 -o2 时候产生不可预知错误,(碰到过2次)
我没有办法和精力去分析,所以我都是使用debug然后自己优化。

2,疑问:你release时候真的敢这么不负责,完全交给编译器?

使用特权

评论回复
7
high|  楼主 | 2007-3-27 11:48 | 只看该作者

同意2楼

不仅windows,嵌入式使用assert也很好,

我想,改写或者自己设计一个简易的ASSERT是很简单的。

我是这么干的:如果没有runtime库支持,不用抛出异常,打印后直接用一个死循环。--当然仅是调试模式下


使用特权

评论回复
8
后学| | 2007-3-27 13:22 | 只看该作者

系统、驱动和应用程序有区别的,

优化的方向不同,

有的是时间优化,有的是空间优化,有的是可读性优化,哈哈,

使用特权

评论回复
9
snakeemail| | 2007-3-27 14:13 | 只看该作者

zt是啥意思呀

使用特权

评论回复
10
computer00| | 2007-3-27 14:23 | 只看该作者

转z贴t

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1078

帖子

0

粉丝