限制int数据类型的大小

时间:2016-06-23 16:11:35

标签: c++ c c++11

如何将32位和64位机器中int数据类型的大小限制为4个字节而不管编译器类型如何? 我必须使用stdint.h吗?

3 个答案:

答案 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_tuint32_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中定义的类型。