2014-10-03 74 views
2

該標準說枚舉類型是char,signedunsigned之間的整數類型。64位機上枚舉的sizeof

但是一個int變成一個32位的機器應該是4個字節而變成一個64位的機器應該是8個字節。 那麼爲什麼我的GCC進入一個64位的機器返回4這個枚舉的sizeof

enum color 
{ 
    RED, 
    GREEN, 
    BLUE 
}; 

size_t t = sizeof (enum color); // here 4 
+1

您的機器上的sizeof(int)'不是4嗎? – 2014-10-03 13:05:31

+0

相關:[枚舉類型](http://stackoverflow.com/questions/1113855/is-the-sizeofenum-sizeofint-always)和[int的大小](http://stackoverflow.com/questions/10197242/在64位機器上應該是什麼尺寸) – 2014-10-03 13:06:12

+1

在所有常見的64位ABI上,int都是32位。 – delnan 2014-10-03 13:07:40

回答

2

OP:標準說,枚舉類型是charsignedunsigned之間的整數類型。
答:關閉,但不完全。 See more @alk

每個枚舉類型應是兼容char,有符號整數類型,或 無符號整數類型。類型的選擇是由實現定義的,但是應該能夠代表枚舉的所有成員的值。 C11dr§6.7.2.24

OP:但是32位機器上的int應該是4個字節,在64位機器上應該是8個字節。
答:不可以。儘管通常情況下,處理器的字大小和int通常都是相同的,但C規範並不要求這樣做,並且許多實現並未遵循這一規定,特別是在使用32位int的64位計算機上的編譯器。此外,8位處理器(在嵌入式領域仍然很普遍)至少需要一個16位的int才能兼容。

OP:爲什麼64位機器上的GCC返回4這個枚舉的sizeof?答:這是編譯器的選擇。可能與int大小相匹配,在64位編譯器中很常見。

+1

他的編譯器使用我認爲的LP64編程模型。如果我沒有錯,int就是32位。 – Mazhar 2016-11-24 08:53:45