2011-09-07 8 views
10

विभिन्न कंपेलरों (जीसीसी, विज़ुअल सी और अन्य?) के बीच हमेशा एक enum का आकार है। यही है, एक विशिष्ट enum का sizeof() प्रत्येक compiler के साथ समान मूल्य देता है जो सी/सी ++ मानकों का पालन करता है?विभिन्न कंपाइलर्स के बाइट्स में enums का आकार

+0

और हस्ताक्षर भी भिन्न हो सकता है। –

उत्तर

14

सं

दोनों सी और सी ++ में एक enum एक आकार ऐसा है कि सभी मूल्यों व्यक्त किया जा सकता है और एक पूर्णांक प्रकार के साथ संगत हो जाएगा। विभिन्न कंपाइलर प्रकार चुनने के लिए अलग-अलग एल्गोरिदम का उपयोग कर सकते हैं (यदि यह किसी अन्य मानक द्वारा स्पष्ट रूप से परिभाषित एबीआई द्वारा निर्दिष्ट नहीं है)।

+0

जरूरी नहीं: सी संकलन द्वारा गणना मूल्यों के प्रकार को चुनने की अनुमति देता है, जैसा कि आपके उत्तर के अनुसार, सी ++ करता है। [सी मानक] में अनुभाग 6.7.2.2/4 देखें (http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf)। – pmg

+0

इसके अतिरिक्त, सी ++ 0x में आप नए * एनम कक्षा * का उपयोग पूर्णांक प्रकार निर्दिष्ट करने के लिए कर सकते हैं जिसका उपयोग गणना मानों को वापस करने के लिए किया जाएगा। –

+0

@pmg, धन्यवाद। मुझे नहीं पता कि मुझे यह कहां मिला। मैंने जांच की कि यह पहले ही सी 0 9 0 में मामला था। – AProgrammer

2

"प्रत्येक प्रगणित प्रकार चार के साथ संगत होगा, एक हस्ताक्षरित पूर्णांक प्रकार, या एक अहस्ताक्षरित पूर्णांक प्रकार (सी ++ 11 एक नई वाक्य रचना के साथ अंतर्निहित प्रकार निर्दिष्ट कर सकते)। प्रकार की पसंद है कार्यान्वयन-परिभाषित) लेकिन गणना के सभी सदस्यों के मूल्यों का प्रतिनिधित्व करने में सक्षम होंगे। "

"... एक कार्यान्वयन किस पूर्णांक प्रकार की पसंद में देरी हो सकती है जब तक कि सभी गणना स्थिरांक नहीं देखे जाते।"

आईएसओ/आईईसी 9899: 1999 (ई) p.105

तो हम केवल sizeof (enum) के लिए ऊपरी सीमा नहीं है। अधिकांश प्रणालियों पर मेरे आकार (enum) = 4 था, लेकिन एसटीएम कंपाइलर ने enum

संपादित करें: ऐसा लगता है कि आप अपने enum के मान को सेट कर सकते हैं यह सुनिश्चित करने के लिए अधिकतम int कि कंपाइलर enum आकार के रूप में पूर्णांक चुनता है।

संबंधित मुद्दे