字符常量的类型

use*_*261 4 c types constants character

我正在学习物理,在我们的编程课程的讲义中,写了一个字符常量,在C中有char类型,其中字符常量我的意思是像'x'这样的表达式.在询问我的讲师是否是一个错误之后,他说不.在向他展示了C90,C99和C11之后,清楚地写明了一个字符常量有int类型,他仍然没有说这是一个错误.

所以在再次问他之前,我想向自己保证我得到了正确的方法,为什么会这样,因为它似乎浪费了记忆.我发现的一切都是为什么会这样,是因为历史原因,这是相当含糊的.另外我想知道为什么在C++中,他们将字符常量的类型更改为char.

编辑:非常感谢你的答案.

Joh*_*ode 6

在线C语言标准,2011年草案:

6.4.4.4字符常量
...
2整数字符常量是用单引号括起来的一个或多个多字节字符的序列,如'x'.甲宽字符常数是相同的,除了预连接由字母固定的L,uU.除了稍后详述的一些例外,序列的元素是源字符集的任何成员; 它们以实现定义的方式映射到执行字符集的成员.
...
10整数字符常量具有类型int.包含映射到单字节执行字符的单个字符的整数字符常量的值是解释为整数的映射字符的表示的数值.包含多个字符(例如'ab')的整数字符常量的值 ,或包含未映射到单字节执行字符的字符或转义序列的值是实现定义的.如果整数字符常量包含单个字符或转义序列,则其值是当char值为单个字符或转义序列的类型的对象转换为类型时生成的值int.

所以是的,在C中,单个字符常量,如有'x'类型int.

为什么是这样的,据我所知,在很大程度上失去了历史1,虽然我怀疑这是尽量减少转换对结果进行比较时getchar(其返回int)或类似参数可变型函数的工作printf(这将自动升级类型的任何表达式charint).

由于C++为I/O和类型泛型操作提供了替代机制,因此字符常量具有类型是有意义的char.

在实践中是否重要?不是我的经验,但我在文本处理方面的经验并不那么广泛.

我应该真正阅读我从标准中复制的内容; 原因在该片段中给出.您可以使用多字符常量'abc',这些常量不会逻辑映射到单个char值.


现在看看有人发现Ritchie或Kernighan的广泛引用,他们解释了他们为什么这么做