【发布时间】:2012-02-16 07:39:34
【问题描述】:
为什么字符函数接受 int 参数而不是 char 参数?
<ctype.h>
int isalnum(int c);
int isalpha(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);
int tolower(int c);
int toupper(int c);
【问题讨论】:
-
我怀疑答案类似于给定的here。在 C 中,字符文字的类型为
int。 -
@Cody:这两个决定可能是相关的,因为在 C 中对字符进行“计算”的正确数据类型是
int。但是与这些函数的参数具有相同类型的文字并不像看起来那么简单。你可以写isalnum('a'),但不能保证你能写isalnum(CHAR_MIN),或者在你的实现中对应于CHAR_MIN的任何字符文字,因为它可能是负数。为了与这些函数正确匹配,字符文字确实需要类型unsigned,但将它们转换为char可能会很糟糕。