我正在学习物理,在我们的编程类(class)的讲义中写到字符常量,在 C 中有类型 char ,其中字符常量我的意思是像 'x' 这样的表达式。
在问我的讲师这是否是一个错误后,他说没有。在向他展示了 C90、C99 和 C11 之后,其中清楚地写了一个字符常量的类型为 int ,他仍然没有说这是一个错误。
所以在再次问他之前,我想向自己保证我是正确的,为什么会这样,因为这似乎是在浪费内存。
关于为什么会这样,我发现的一切都是由于历史原因,这是相当模糊的。
另外我想知道为什么在 C++ 中,他们将字符常量的类型更改为 char 。
编辑:非常感谢您的回答。
最佳答案
Online C language standard, 2011 draft :
所以是的,在 C 中,诸如 'x'
之类的单字符常量的类型是 int
。
为什么会这样,AFAIK 在很大程度上丢失了 history1,尽管我怀疑在与 getchar
(返回 int
)的结果进行比较或使用像 printf
这样的可变参数函数(它会自动提升输入 char
到 int
)。
由于 C++ 为 I/O 和类型泛型操作提供了替代机制,因此字符常量具有 char
类型是有意义的。
这在实践中重要吗?不是我的经验,但我在文本处理方面的经验并不是那么广泛。
我实际上应该阅读我从标准中复制的内容;原因在该片段中给出。您可以使用多字符常量,例如 'abc'
,它不会在逻辑上映射到单个 char
值。
1. 现在看有人从 Ritchie 或 Kernighan 那里找到大量引述,解释他们为什么这样做
关于c - 字符常量的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20764538/