Max*_*amy 15 c putchar toupper tolower
在C中,字符串是char(char *)数组,字符通常存储在其中char.我注意到libC中的一些函数将作为参数整数而不是char.
例如,让我们的职能toupper()和tolower()两个使用int.手册页说:
如果c不是无符号字符值或EOF,则这些函数的行为是未定义的.
我的猜测是,有一个int,toupper并且tolower能够处理unsigned char和EOF.但实际上EOF是在实践中(有没有关于它的值的规则?)一个可以用a存储的值char,并且由于这些函数不会转换EOF成其他东西,我想知道为什么toupper不简单地将char作为参数.
在任何情况下,为什么我们需要接受不是字符的东西(例如EOF)?有人能为我提供相关的用例吗?
这与fputc或类似putchar,也可以将int其转换为unsigned char无论如何.
我正在寻找这种选择的确切动机.我想说服,我不想回答,我不知道有一天有人问我.
C11 7.4
标头
<ctype.h>声明了几个用于分类和映射字符的函数.在所有情况下,参数都是一个int,其值应表示为unsigned char或者等于宏EOF的值.如果参数具有任何其他值,则行为未定义.
C11 7.21.1
EOF
它扩展为整数常量表达式,类型为int且为负值,...
C标准明确指出EOF始终是具有负值的int.此外,默认char类型的签名是实现定义的,因此它可能是无符号的,并且无法存储负值:
C11 6.2.5
如果基本执行字符集的成员存储在char对象中,则其值保证为非负值.如果任何其他字符存储在char对象中,则结果值是实现定义的,但应在可以在该类型中表示的值范围内.