原帖由
benjiam 于 2008-7-1 11:24 发表

假设你现在正在面试,主考不紧不慢地给出下一道题目:“请用C语言写一个类似strcpy的函数。
正在装载数据……
要考虑可能发生的异常情况。” 你会怎么做呢?很明显,对方不是在考察你的编程能力,因为复制字符 ...
这个例子觉得不是很恰当,因为在这个情况下,的确不应该用断言
我的理解是
断言用在绝对不可能发生的情况下,或者说一旦发生,就需要停止程序进行检查的情况下,而不是用在错误处理上
主要按照业务逻辑来判断
上面举的strcpy为例,strcpy底层函数,默认应该具有返回strcpy成功与否的逻辑
并且也应该可以接受任何参数,但是需要判断的逻辑
所以这题考的并不是assert的使用,是考察strcpy所应该处理的问题
当然不可以用assert,因为NULL也是一个合法参数,按照规定参数等于NULL就不处理,返回strcpy失败
又比如,现在有1~5 5种东西,1、2、3是可以吃的,4、5是不可吃的
现在写一个函数 “吃”
int eat(int id)
{
// 问题只考虑5种东西,如果不在这个范围内,就是不合法的
// 所以用断言
assert( 1 <= id && id <= 5);
// 这个才是错误处理,全是合法参数的情况下,4~5是不可以吃的
if ( 4 <= id ) return CANT_EAT;
... ...
}
当然,用if判断不在1~5之间也不是不可以,确实是判断了
这些就是各人对程序的理解,和程序实际需求之间的调整了
[
本帖最后由 Strange 于 2008-7-1 13:56 编辑 ]