2011-09-07 21 views
10

, bir derenin boyutudur, her zaman farklı derleyiciler arasında aynıdır (gcc, visual c ve diğerleri?). Yani, belirli bir enum'un sizeof() değeri C/C++ standartlarını takip eden her derleyici ile aynı değerleri verir mi?Farklı derleyicilerdeki bayt cinsinden enumların boyutu

+0

Ve imzalar da farklılık gösterebilir. –

cevap

14

C ve C hem de sayılı

++ bir enum tüm değerler temsil edilebilir bir boyutu, ve bir tam sayı türü ile uyumlu olacaktır. Farklı derleyiciler, türü seçmek için farklı bir algoritma kullanabilir (eğer açıkça tanımlanmış bir ABI gibi başka bir standart tarafından belirtilmemişse).

+0

Mutlaka gerekli değil: C, sizin cevapınıza göre, C++ gibi, numaralandırma türünün derleyici tarafından seçilmesine izin verir. [C Standard] 'da bölüm 6.7.2.2/4'e bakınız (http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf). – pmg

+0

Ayrıca, C++ 0x'de, numaralandırma değerlerini yedeklemek için kullanılacak tamsayı türünü belirtmek için yeni * enum sınıfı * kullanabilirsiniz. –

+0

@pmg, teşekkürler. Bunu nereden aldığımı bilmiyorum. Kontrol ettim zaten C90'da durum buydu. – AProgrammer

2

"Her sayılan türü char ile uyumlu olacaktır, imzalı tamsayı türü veya bir işaretsiz tamsayı türü (C++ 11 yeni sözdizimi ile altta yatan türünü belirlemenizi sağlar). Türünün seçimi olduğunu Uygulama tanımlı) ancak numaralandırmanın tüm üyelerine ait değerlerini temsil edebilecektir. "

"... Bir uygulama, tüm numaralandırma sabitleri görülünceye kadar tam sayısının seçimini geciktirebilir."

ISO/IEC 9899: Yani biz sadece sizeof (enum) için üst sınırları var

1999 (E) s.105. Çoğu sistemde, sizeof (enum) = 4 vardı, ancak STM derleyici, enum

'da yazılan değerlere bağlı olarak sizeof (enum) = 1/2/4 yaptı Düzenleme: Enum değerinizden birini ayarlayabilirsiniz. compiler'ın integer'i enum büyüklüğü olarak seçmesini sağlamak için maks.

İlgili konular