Domanda Dimensione delle enumerazioni in byte di compilatori diversi [duplicato]


Questa domanda ha già una risposta qui:

è la dimensione di un enum sempre uguale tra diversi compilatori (gcc, visual c e altri?). Cioè, sizeof () di un enum specifico dà gli stessi valori con ogni compilatore che segue gli standard C / C ++?


10
2017-09-07 13:51


origine


risposte:


No.

Sia in C che in C ++ un enum avrà una dimensione tale che tutti i valori possano essere rappresentati ed essere compatibili 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 consente di specificare il tipo sottostante con una nuova sintassi)


14
2017-09-07 13:54



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

"... Un'implementazione può ritardare la scelta di quale tipo di intero   fino a quando tutte le costanti di enumerazione sono state viste. "

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

Quindi abbiamo solo i 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 sia possibile impostare uno dei valori dell'enumerazione su max int per garantire che il compilatore scelga l'intero come dimensione enum.


2
2017-09-07 08:55