【发布时间】:2021-10-16 17:53:50
【问题描述】:
我正在通过编码检查 short 、 int 和 long 的大小。我的期望是所有数据类型修饰符的大小都会有所不同。令人惊讶的是,long 和 int 的大小是相同的,都是 4 字节。我已经提供了代码和输出。我正在使用 64 位 Windows 操作系统和 gcc 编译器(从 https://www.msys2.org 下载)。 我不得不尝试寻找它背后的原因,但不幸的是我无法理解或原因有点模糊。
#include <stdio.h>
int main()
{
printf("Size of short is %d",sizeof(short));
printf("\nSize of int is %d",sizeof(int));
printf("\nSize of long is %d",sizeof(long));
}
输出:
Size of short is 2
Size of int is 4
Size of long is 4
【问题讨论】:
-
字体大小取决于平台。我在我的 linux 上得到了
sizeof(long) == 8(与long long的大小相同)。 -
“我的期望是所有数据类型修饰符的大小都会不同”。这是完全没有根据的。
-
正确且非常具体的原因是“历史上就是这样发生的”。
-
%zu是 size_t 类型值的正确printf格式字符串,而不是%d。 -
现在通常最好使用
#include <stdint.h>并使用那里的类型(例如,int32_t、uint64_t、int_least32_t、int_fast16_t等)。
标签: c