2016-06-23 92 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中定義的類型。