什么是契约——Eiffel的观点
假设你现在正在面试,主考不紧不慢地给出下一道题目:“请用C语言写一个类似strcpy的函数。要考虑可能发生的异常情况。” 你会怎么做呢?很明显,对方不是在考察你的编程能力,因为复制字符串实在太容易了。对方是在考察你的编程风格(习惯),或者说,要看看你编码的质量。
下面是多种可能的做法:
void
string_copy1(char* dest, const char* source)
{
assert(dest != NULL); /* 使用断言 */
assert(source != NULL);
while (*source != '/0') {
*dest = *source;
++dest;
++source;
}
*dest = '/0';
}
void
string_copy2(char* dest, const char* source)
{
if (dest != NULL && source != NULL) { /* 对错误消极静默 */
while (*source != '/0') {
*dest = *source;
++dest;
++source;
}
*dest = '/0';
}
}
int
string_copy3(char* dest, const char* source)
{
if (dest != NULL && source != NULL) {
while (*source != '/0') {
*dest = *source;
++dest;
++source;
}
*dest = '/0';
return SUCCESS; /* 返回表示正确的值 */
}
else {
errno = E_INVALIDARG; /* 设定错误号 */
return FAILED; /* 返回表示