2012-07-25 127 views
21

可能重复:
Size of character ('a') in C/C++为什么此程序的输出在C和C++之间不同?

下面的程序

#include <stdio.h> 

int main() 
{ 
    printf("%d\n", sizeof('\0')); 
    printf("%d\n", sizeof(0)); 
} 

用gcc输出

4 
4 

和机智编译h g ++

1 
4 

为什么会发生这种情况?我知道这不是编译器,而是C和C++之间的区别,但是原因是什么?

+25

更喜欢_language_-dependent! – Shahbaz 2012-07-25 10:18:08

+0

出于好奇,你为什么首先要做这件事? – Aerovistae 2012-11-29 18:14:09

回答

35

在C中,字符常量具有类型int按照标准的6.4.4.4(10),

一个整数的字符常数具有int类型。包含映射到单字节执行字符的单个字符的整数字符常量 的值是被解释为整数的映射字符的表示形式的 数值。

因此,您打印出的尺寸为int两倍。

在C++中,字符常量的类型为char

12

\0字符文字在C中被视为int,所以您实际上最终会打印sizeof(int)而不是sizeof(char)

ideone给出了相同的结果(C,C++)。

+1

@Konrad,true,小于int的所有东西在C.中被认为是int。Fixed。 – 2012-07-25 10:09:28

+0

不,这不是真的,不是* everything *被视为'int',只有字符文字:http://ideone.com/ZQIPC – 2012-07-25 10:12:19

+0

@Konrad,在您的示例中的'short'测试使用了一个强制转换。当然,没有办法表达'short'字面值,所以即使是'short'中的值也会从开始时被解析为'int'。事实上,知道一个可能的'short'文字是否会像'char'一样被对待会很有趣...... – 2012-07-25 10:18:02

4

在C字符文字是整数。在C++中,它们是字符。

0

输出已经与编译器相关,因为您使用了错误的格式说明符size_t这将是%zu。在比intsize_t的64位系统上,这会给你带来任何垃圾。

否则这个舒尔是依赖于编译器的。您尝试打印大小的两个值分别是C中的int和C++中的charint。所以在C中,通常应该给你4 48 8,并且在C++ 1 41 8中。

相关问题