函数名与返回值类型在语义上不可冲突。
违反这条规则的典型代表就是C 语言标准库函数getchar 。几乎没有一部名著没有提到
getchar 函数,因为它实在太经典,太容易让人犯错误了。所以,每一个有经验的作者都
会拿这个例子来警示他的读者,我这里也是如此:
char c;
c=getchar();
if(EOF == c)
{
…
}
按照getchar 名字的意思,应该将变量 c 定义为char 类型。但是很不幸,getchar 函数的
返回值却是int 类型,其原型为:
int getchar(void) ;
由于c 是char 类型的,取值范围是[-128,127], 如果宏EOF 的值在char 的取值范围之外,
EOF 的值将无法全部保存到c 内,会发生截断,将 EOF 值的低8 位保存到c 里。这样if 语
句有可能总是失败。这种潜在的危险,如果不是犯过一次错,肯怕很难发现。
阅读(289) | 评论(0) | 转发(0) |