2011-09-07 10 views

risposta

14

No.

Sia C e C++ un enum avranno una dimensione tale che tutti i valori possono essere rappresentati ed essere compatibile con un tipo intero. Diversi compilatori possono utilizzare algoritmi diversi per scegliere il tipo (se non è specificato da un altro standard come un ABI chiaramente definito). (C++ 11 permette di specificare il tipo sottostante con una nuova sintassi)

+0

Non necessariamente: C consente al tipo di valori di enumerazione di essere scelti dal compilatore, proprio come, secondo la tua risposta, fa C++. Vedi sezione 6.7.2.2/4 in [lo standard C] (http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf). – pmg

+0

Inoltre, in C++ 0x è possibile utilizzare la nuova * enum class * per specificare il tipo intero che verrà utilizzato per eseguire il backup dei valori di enumerazione. –

+0

@ pmg, grazie. Non so dove l'ho preso. Ho verificato che fosse già il caso in C90. – AProgrammer

2

"Ogni tipo enumerato sono compatibili con char, un tipo intero firmata , o un tipo intero senza segno. La scelta del tipo è definito dall'implementazione) ma deve essere in grado di rappresentare i valori di tutti i membri dell'enumerazione. "

"... Un'implementazione può ritardare la scelta di quale tipo intero è finché non sono state visualizzate tutte le costanti di enumerazione."

ISO/IEC 9899: 1999 (E) p.105

Così abbiamo solo limiti superiori per sizeof (enum). Sulla maggior parte dei sistemi ho avuto sizeof (enum) = 4, ma il compilatore STM ha reso sizeof (enum) = 1/2/4 a seconda dei valori scritti in enum

Modifica: sembra che tu possa impostare uno dei valori del tuo enum in max int per assicurare che il compilatore scelga intero come dimensione enum.

Problemi correlati