efi*_*fie 7 c type-conversion kernighan-and-ritchie
Kernighan和Ritchie 撰写的The C Programming Language一书,第二版在关于类型转换的章节中的第43页中说明:
的另一个例子
char,以int转换函数lower,其中单个字符映射到下壳体为ASCII字符集.如果字符不是大写字母,则lower返回不变.Run Code Online (Sandbox Code Playgroud)/* lower: convert c to lower case; ASCII only */ int lower(int c) { if (c >= 'A' && c <= 'Z') return c + 'a' - 'A'; else return c; }
它没有在文中明确提及,所以我想确保我理解正确:转换是在lower用类型变量调用函数时发生的char,不是吗?特别是,表达
c >= 'A'
Run Code Online (Sandbox Code Playgroud)
没有任何一个转换,从int到char,因为字符常量像'A'
作为被处理int内部从一开始,不是吗?编辑:或者这是否与charANSI C 有所不同(例如,字符常量被视为a ),本书涵盖了哪些内容?
正如您所期望的那样,字符常量具有 type int,因此您认为此函数中没有晋升是正确的int。
如果将类型变量char传递给此函数,则可能发生的任何提升都会发生,并且这很可能是文本所指的内容。
字符常量的类型int在当前的C17 标准(第 6.4.4.4p10 节)中:
整型字符常量具有类型
int
在C89 / ANSI C 标准中(语义下的第 3.1.3.4 节):
整型字符常量具有类型
int
K&R 第二版所指的是后者。
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |