getchar()

来源:互联网 发布:什么叫app端口 编辑:程序博客网 时间:2024/06/05 15:41

摘自《C语言深度剖析》

1、原型
int getchar(void);

备注:函数名与返回值类型在语义上不可冲突
违反这条规则的典型代表就是C语言标准库函数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 语句有可能总是失败。这种潜在的危险,如果不是犯过一次错,肯怕很难发现。

0 0