Chinaunix首页 | 论坛 | 博客
  • 博客访问: 222111
  • 博文数量: 253
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-21 12:29
文章分类

全部博文(253)

文章存档

2014年(253)

我的朋友

分类: C/C++

2014-09-21 12:54:59

函数名与返回值类型在语义上不可冲突。
违反这条规则的典型代表就是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 语
句有可能总是失败。这种潜在的危险,如果不是犯过一次错,肯怕很难发现。
阅读(228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~