如何将32位和64位机器中int数据类型的大小限制为4个字节而不管编译器类型如何? 我必须使用stdint.h吗?
答案 0 :(得分:10)
一般情况下,除非您编写自己的编译器,否则不能这样做。
int
的大小是实现定义的,这意味着每个编译器确定其大小。
通常 4个字节/ 32位,但这并不能保证。 (字节甚至不能保证恰好是8位,但你不太可能遇到他们不在的系统。)
如果编译器使用您不喜欢的大小,您可以做的是确保您的代码无法编译:
#include <limits.h>
#if INT_MAX != 0x7FFFFFFF
#error "This code requires 32-bit int"
#endif
既然您询问了int
,那就是答案。如果您真的想要一个32位整数类型,那么您可以使用int32_t
中定义的类型<stdint.h>
或uint32_t
无符号类型。没有任何32位整数类型或32位类型不符合某些要求的实现将不会定义int32_t
和uint32_t
- 但是,您和#39;不太可能遇到这样的系统。
请注意,int
并不仅仅意味着&#34;整数&#34 ;;类型int
是几种整数类型之一。
答案 1 :(得分:5)
您不能强制编译器更改它用于int
的位数。如果您需要使用32位整数类型捕获积分数据,请使用int32_t
。
答案 2 :(得分:2)
您无法控制编译器如何管理其本机数据类型。但您可以选择如何使用它们。例如,在编译32位时,使用int32_t
(总是32位)。编译64位时,使用int64_t
(总是64位)。如果您需要使用可根据您是编译32位还是64位而自行调整大小的单一类型,请使用intptr_t
(分别为32位或64位)。所以是的,如果整数类型中的位数对您很重要,那么您应该使用stdint.h
中定义的类型。