为什么这个程序的输出在C和C ++之间有所不同?

时间:2012-07-25 10:02:58

标签: c++ c gcc g++

  

可能重复:
  Size of character ('a') in C/C++

以下计划

#include <stdio.h>

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

使用gcc输出编译

4
4

和g ++

1
4

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

4 个答案:

答案 0 :(得分:35)

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

  

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

因此,您打印出int两次的大小。

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

答案 1 :(得分:12)

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

ideone会得到相同的结果(CC++)。

答案 2 :(得分:4)

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

答案 3 :(得分:0)

输出已经依赖于编译器,因为您对size_t使用了错误的格式说明符,这将是%zu。在size_t宽于int的64位系统上,这可能会给你带来任何垃圾。

否则这个shure依赖于编译器。您尝试打印大小的两个值在C中都是int,在C ++中是charint。所以在C中,这通常应该为您提供4 48 8以及C ++ 1 41 8