2016-06-23 91 views
-11

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

+5

选择*一种*语言。 C和C++不是一回事。 –

+0

在这里,我们期望在询问之前有一定的程度和_research_。 – edmz

+1

查看[this](http://en.cppreference.com/w/c/types/整数)或[this](http://en.cppreference.com/w/cpp/types/整数) – NathanOliver

回答

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 - 但是,您不太可能会遇到这样的系统。

请记住,int不仅仅意味着“整数”;类型int是几种整数类型之一。

+0

@NathanOliver:我刚刚在几秒钟前的编辑中提到过。但是问题是关于'int'的问题,而不是一般的整数类型。 –

+1

另请注意'int32_t'可以是32位但不是4个字节。它可能根本不可用 - 你想快速失败。尽可能运行。 – edmz

+0

@black是不是4个字节== 32位? – mikeyq6

5

你不能强制编译器改变它用于int的位数。如果您需要使用32位整数类型捕获积分数据,请使用int32_t

2

您无法控制编译器如何管理其本机数据类型。但是你可以选择你决定如何使用它们。例如,编译32位时,使用int32_t(总是32位)。编译为64位时,请使用int64_t(总是64位)。如果您需要使用一种可根据编译32位还是64位而自行调整大小的类型,请使用intptr_t(分别始终为32位或64位)。所以是的,如果整数类型的位数对您来说很重要,您应该使用stdint.h中定义的类型。