下面的程序
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('\0'));
printf("%d\n", sizeof(0));
}
用gcc输出
4
4
和机智编译h g ++
1
4
为什么会发生这种情况?我知道这不是编译器,而是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++之间的区别,但是原因是什么?
在C中,字符常量具有类型int
按照标准的6.4.4.4(10),
一个整数的字符常数具有int类型。包含映射到单字节执行字符的单个字符的整数字符常量 的值是被解释为整数的映射字符的表示形式的 数值。
因此,您打印出的尺寸为int
两倍。
在C++中,字符常量的类型为char
。
@Konrad,true,小于int的所有东西在C.中被认为是int。Fixed。 – 2012-07-25 10:09:28
不,这不是真的,不是* everything *被视为'int',只有字符文字:http://ideone.com/ZQIPC – 2012-07-25 10:12:19
@Konrad,在您的示例中的'short'测试使用了一个强制转换。当然,没有办法表达'short'字面值,所以即使是'short'中的值也会从开始时被解析为'int'。事实上,知道一个可能的'short'文字是否会像'char'一样被对待会很有趣...... – 2012-07-25 10:18:02
在C字符文字是整数。在C++中,它们是字符。
输出已经与编译器相关,因为您使用了错误的格式说明符size_t
这将是%zu
。在比int
宽size_t
的64位系统上,这会给你带来任何垃圾。
否则这个舒尔是依赖于编译器的。您尝试打印大小的两个值分别是C中的int
和C++中的char
和int
。所以在C中,通常应该给你4 4
或8 8
,并且在C++ 1 4
或1 8
中。
更喜欢_language_-dependent! – Shahbaz 2012-07-25 10:18:08
出于好奇,你为什么首先要做这件事? – Aerovistae 2012-11-29 18:14:09