2011-09-07 44 views

回答

14

在C和C++的枚舉將具有的尺寸使得所有的值可以被表示,並與整數類型兼容。不同的編譯器可能使用不同的算法來選擇類型(如果它沒有被另一個標準如明確定義的ABI所指定)。 (C++ 11允許指定一個新的語法的基礎類型)

+0

不一定:C允許編譯器選擇枚舉值的類型,就像根據你的答案一樣,C++。參見[C標準](http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)中的6.7.2.2/4節。 – pmg

+0

此外,在C++ 0x中,您可以使用新的* enum類*指定將用於支持枚舉值的整數類型。 –

+0

@pmg,謝謝。我不知道我在哪裏。我查過它已經是C90的情況。 – AProgrammer

2

「每一枚舉類型應與炭兼容,一個有符號的整數 型或無符號的整數類型。類型的選擇是 實現定義的),但應能夠表示枚舉的所有成員的值。「

「...一個實現可能會延遲選擇哪個整數類型 ,直到看到所有枚舉常量。」

ISO/IEC 9899:1999(E)第105頁

所以我們只有上邊界的sizeof(ENUM)。在大多數我sizeof(枚舉)= 4,但STM編譯器作出sizeof(枚舉)= 1/2/4取決於在枚舉中寫入的值的系統

編輯:你似乎可以設置您的枚舉值之一max int以確保編譯器選擇整數作爲枚舉大小。

相關問題