Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个计划是';C和C之间的输出不同++;?_C++_C_Gcc_G++ - Fatal编程技术网

C++ 为什么这个计划是';C和C之间的输出不同++;?

C++ 为什么这个计划是';C和C之间的输出不同++;?,c++,c,gcc,g++,C++,C,Gcc,G++,可能重复: 以下程序 #include <stdio.h> int main() { printf("%d\n", sizeof('\0')); printf("%d\n", sizeof(0)); } 和g++ 1 4 为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是什么原因?< /P> < P> 0 C字符字符在C中被当作是 int >代码,所以你实际上结束了打印 siZeof(int)< /C> >而不是 siZeof(char

可能重复:

以下程序

#include <stdio.h>

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

1
4

为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是什么原因?< /P> < P> <代码> 0 C字符字符在C中被当作是<代码> int >代码,所以你实际上结束了打印<代码> siZeof(int)< /C> >而不是<代码> siZeof(char)< /C> >
ideone
给出了相同的结果(,)。

在C字符中,文字是整数。在C++中,字符是字符,在C中,字符常量<强> >标准为“<代码> int 代码> >64.4.4(10),

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

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


<>在C++中,字符常量有类型<代码> char < /c> > /p> < p>输出已经是编译器依赖的,因为您使用了错误的格式规范,用于<代码> siZeStt < /Cord> >这将是<代码> %ZU。在
size\u t
宽度大于
int
的64位系统上,这可能会给您带来任何类型的垃圾


否则,此舒尔取决于编译器。在C和<代码> char < />代码>和 INT/COM> C++中,您尝试打印大小的值均为<代码> int <代码>。因此,在C中,这通常应该给你< C++ > < 4 > 4 < /> >或<代码> 8 > 8 > />代码>或>代码> 1 8 < /C> >,

@ Konrad,是真的,小于<代码> int >代码>的所有东西都被认为是C.固定的<代码> int <代码>。不,这也不是真的,不是所有的东西都被当作代码> INT/COD>,只有字符文字:@ Konrad,示例中的
short
测试使用强制转换。当然,无法表示
short
文字,因此即使是
short
中的值也会从一开始就被解析为
int
。事实上,如果一个未来的
short
literal与
char
one的处理方式相同,那将是一件很有趣的事情……但是你的评论并没有涉及到literal,而是涉及到值。而且,由于C除了
int
之外没有任何整数文本,如果它谈论的是文本(而不是值),那么这个注释就没有意义了。@Konrad,啊,我实际上是在谈论文本(
int
char
的,因为
short
文本实际上并不存在),不是价值观。我同意我的评论模棱两可,不过,我可能应该找到更好的表达方式。更像是语言依赖!出于好奇,你为什么要这么做?
1
4