【发布时间】:2014-05-25 01:32:03
【问题描述】:
我是一名学生,目前正在通过一本名为“C Primer Plus,第 5 版”的书学习 C 编程语言。我正在学习它,因为我正在从事嵌入式系统和设备、设备驱动程序、低级东西等编程的职业。我的问题很简单,但我还没有从教科书和各种帖子中得到直接的答案在类似于我的问题的 SO 上。
如何确定 SHORT、INT 或 LONG 等整数数据类型的大小?我知道这是一个被问了很多的简单问题,但似乎每个人都用“取决于架构/编译器”来回答这个问题,这让我一无所知,对像我这样的新手没有帮助。
互联网上是否有一个隐藏的图表可以清楚地描述这些不兼容性,或者是否有一些查看编译器(16 位、24 位、32 位、64 位等)并被能够分辨出数据类型是什么?还是在特定系统上手动使用带有编译器的 sizeof 运算符是判断这些数据类型将保存什么的唯一方法?
【问题讨论】:
-
使用
sizeof运算符找出答案。例如。printf("size of int for this compiler and platform is %ld bytes\n", sizeof(int));如果您想要特定位宽的整数,请使用<stdint.h>中的类型。 -
您总是会感到奇怪,例如在 x86_64 上,
long在 Linux 上是 64 位,而在 Windows 上是 32 位。 -
如果你需要固定宽度的整数,
stdint.h定义了 typedef,比如uint32_t(至少,如果你的编译器提供了一个 32 位的无符号整数类型)。 -
对于嵌入式设备/系统等,是使用编译器提供的typedef,还是使用标准(short|int|long)更好,还是有什么区别?
标签: c compiler-construction integer int platform