这个函数究竟是一个char到int转换的例子吗?

efi*_*fie 7 c type-conversion kernighan-and-ritchie

Kernighan和Ritchie 撰写的The C Programming Language一书,第二版在关于类型转换的章节中的第43页中说明:

的另一个例子char,以int转换函数lower,其中单个字符映射到下壳体为ASCII字符集.如果字符不是大写字母,则lower返回不变.

/* lower: convert c to lower case; ASCII only */
int lower(int c)
{
    if (c >= 'A' && c <= 'Z')
        return c + 'a' - 'A';
    else
        return c;
}
Run Code Online (Sandbox Code Playgroud)

它没有在文中明确提及,所以我想确保我理解正确:转换是在lower用类型变量调用函数时发生的char,不是吗?特别是,表达

c >= 'A'
Run Code Online (Sandbox Code Playgroud)

没有任何一个转换,从intchar,因为字符常量像'A' 作为被处理int内部从一开始,不是吗?编辑:或者这是否与charANSI C 有所不同(例如,字符常量被视为a ),本书涵盖了哪些内容?

dbu*_*ush 4

正如您所期望的那样,字符常量具有 type int,因此您认为此函数中没有晋升是正确的int

如果将类型变量char传递给此函数,则可能发生的任何提升都会发生,并且这很可能是文本所指的内容。

字符常量的类型int在当前的C17 标准(第 6.4.4.4p10 节)中:

整型字符常量具有类型 int

C89 / ANSI C 标准中(语义下的第 3.1.3.4 节):

整型字符常量具有类型int

K&R 第二版所指的是后者。

  • @efie:“char”、“short”、“int”和“long”都是整数类型,整数只是一个值,所以我不认为它们将字符引用为整数具有信息性。 (2认同)