該標準說枚舉類型是char
,signed
和unsigned
之間的整數類型。64位機上枚舉的sizeof
但是一個int
變成一個32位的機器應該是4個字節而變成一個64位的機器應該是8個字節。 那麼爲什麼我的GCC進入一個64位的機器返回4這個枚舉的sizeof
?
enum color
{
RED,
GREEN,
BLUE
};
size_t t = sizeof (enum color); // here 4
該標準說枚舉類型是char
,signed
和unsigned
之間的整數類型。64位機上枚舉的sizeof
但是一個int
變成一個32位的機器應該是4個字節而變成一個64位的機器應該是8個字節。 那麼爲什麼我的GCC進入一個64位的機器返回4這個枚舉的sizeof
?
enum color
{
RED,
GREEN,
BLUE
};
size_t t = sizeof (enum color); // here 4
OP:標準說,枚舉類型是char
,signed
和unsigned
之間的整數類型。
答:關閉,但不完全。 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位編譯器中很常見。
他的編譯器使用我認爲的LP64編程模型。如果我沒有錯,int就是32位。 – Mazhar 2016-11-24 08:53:45
您的機器上的sizeof(int)'不是4嗎? – 2014-10-03 13:05:31
相關:[枚舉類型](http://stackoverflow.com/questions/1113855/is-the-sizeofenum-sizeofint-always)和[int的大小](http://stackoverflow.com/questions/10197242/在64位機器上應該是什麼尺寸) – 2014-10-03 13:06:12
在所有常見的64位ABI上,int都是32位。 – delnan 2014-10-03 13:07:40