C'de enumsabit tiptedir int. C ++ 'da, numaralandırılmış türdendir.
enum en_e{
en_e_foo,
en_e_bar=UINT64_MAX,
};
C, bu bir kısıtlama ihlali (bir teşhis gerektiren eğer UINT64_MAX aşarsa INT_MAXçok muhtemelen işlevi gören). AC derleyicisi programı tamamen reddedebilir veya bir uyarı yazdırabilir ve ardından davranışı tanımsız olan bir yürütülebilir dosya oluşturabilir. (Bir kısıtlamayı ihlal eden bir programın mutlaka tanımlanmamış bir davranışa sahip olduğu% 100 net değildir, ancak bu durumda standart davranışın ne olduğunu söylemez, bu nedenle bu hala tanımlanmamış bir davranıştır.)
gcc 6.2 bu konuda uyarmaz. clang yapar. Bu gcc'deki bir hatadır; standart başlıklardan makrolar kullanıldığında bazı tanı mesajlarını hatalı şekilde engeller. Hata raporunu bulduğu için Grzegorz Szpetkowski'ye teşekkürler: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71613
C ++ 'da, her numaralandırma türünün bir tamsayı türü olan (zorunlu olarak değil ) temel bir türü vardır int. Bu temel tür, tüm sabit değerleri temsil edebilmelidir. Yani bu durumda, hem en_e_foove en_e_bartiptedir en_ebile, geniş, en az 64 bit olmalıdır intdardır.