C में, एक enumस्थिरांक प्रकार का होता है int। C ++ में, यह एन्यूमरेटेड प्रकार का है।
enum en_e{
en_e_foo,
en_e_bar=UINT64_MAX,
};
सी में, यह एक बाधा का उल्लंघन है , निदान की आवश्यकता होती है ( यदि इससे UINT64_MAX अधिक है INT_MAX, जो यह बहुत संभव है)। एसी कंपाइलर कार्यक्रम को पूरी तरह से अस्वीकार कर सकता है, या यह एक चेतावनी प्रिंट कर सकता है और फिर एक निष्पादन योग्य उत्पन्न कर सकता है जिसका व्यवहार अपरिभाषित है। (यह 100% स्पष्ट नहीं है कि एक कार्यक्रम जो एक बाधा का उल्लंघन करता है जरूरी अपरिभाषित व्यवहार है, लेकिन इस मामले में मानक यह नहीं कहता है कि व्यवहार क्या है, इसलिए यह अभी भी अपरिभाषित व्यवहार है।)
gcc 6.2 इस बारे में चेतावनी नहीं देता है। दबंग करता है। यह gcc में एक बग है; यह गलत तरीके से कुछ नैदानिक संदेशों को रोकता है जब मानक हेडर से मैक्रोज़ का उपयोग किया जाता है। बग रिपोर्ट का पता लगाने के लिए ग्रेज़गोरज़ स्ज़ेपकोव्स्की का धन्यवाद: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71613
C ++ में, प्रत्येक एन्यूमरेशन प्रकार में एक अंतर्निहित प्रकार होता है , जो कुछ पूर्णांक प्रकार (जरूरी नहीं int) होता है। यह अंतर्निहित प्रकार सभी स्थिर मूल्यों का प्रतिनिधित्व करने में सक्षम होना चाहिए। तो इस मामले में, दोनों en_e_fooऔर en_e_barप्रकार के होते हैं en_e, जो कम से कम 64 बिट्स चौड़ी होनी चाहिए, भले ही intसंकरा है।