Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70833
  • 博文数量: 65
  • 博客积分: 545
  • 博客等级: 中士
  • 技术积分: 285
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-14 00:49
文章分类
文章存档

2014年(2)

2013年(39)

2012年(24)

我的朋友

分类: C/C++

2013-10-16 15:30:11

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