为什么C语言中字符字面量的sizeof值与sizeof(char)不一致?
你查阅的C11标准内容没有错误,出现该结果的核心原因是:C标准中,字符字面量(如'a')的原生类型为int,而非char,这是C语言的固有规则,不属于运算时的类型提升行为。
规则细节说明
- 你引用的C11标准6.5.3.4节第4段的规则,仅适用于操作数类型为
char、unsigned char、signed char及其限定版本的场景。而'a'本身是int类型,因此sizeof('a')的结果等于当前平台下sizeof(int)的值,你使用的平台int占4字节,输出4完全符合标准要求。 - 你测试的
sizeof( (char)'a' )结果为1,是因为强制类型转换将原本int类型的字符字面量转为了char类型,刚好匹配你查阅的标准条款规则,结果正确。 - 如果你有C开发经验可能会对此产生混淆:C标准中字符字面量的类型为
char,因此C++环境下sizeof('a')结果为1,这是两种语言的规则差异,不要混淆。
你使用的gcc、clang编译器行为以及编译参数均符合C标准要求,不存在错误。
内容的提问来源于stack exchange,提问作者Lianne Connolly
相关产品推荐
相关产品推荐

