के अनुसार सी ++ मानक n4713 , एक बहुत ही इसी तरह के कोड का टुकड़ा प्रदान की जाती है। उपयोग किया जाने वाला प्रकार BOOL
(कस्टम) है, लेकिन यह किसी भी प्रकार पर लागू हो सकता है।
12.2.4
4 यदि मूल्य सही या गलतbool
किसी भी आकार केबिट-फ़ील्ड(एक बिट बिट-फ़ील्ड सहित)में संग्रहीत किया जाता है, तो मूलbool
मूल्य और बिट-फ़ील्ड का मूल्य बराबर की तुलना करेगा। यदि किसी एन्यूमरेटर का मान समान एन्यूमरेशन प्रकार के बिट-फील्ड में संग्रहित किया जाता है और बिट-फील्ड में बिट्स की संख्या उस एन्यूमरेशन टाइप (10.2) के सभी मानों को रखने के लिए पर्याप्त होती है, तो एन्यूमरेटर वैल्यू और बिट-फील्ड का मूल्य बराबर होगा । [ उदाहरण:
enum BOOL { FALSE=0, TRUE=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = TRUE;
if (a.b == TRUE) // yields true
{ /* ... */ }
}
- अंतिम उदाहरण]
पहली नज़र में, बोल्ड भाग व्याख्या के लिए खुला दिखाई देता है। हालाँकि, सही आशय स्पष्ट हो जाता है जब enum BOOL
से प्राप्त होता है int
।
enum BOOL : int { FALSE=0, TRUE=1 }; // ***this line
struct mystruct { BOOL enabled:1; };
int main()
{
struct mystruct s;
s.enabled = TRUE;
if(s.enabled == TRUE)
printf("Is enabled\n"); // --> we think this to be printed
else
printf("Is disabled !!\n");
}
उपरोक्त कोड के साथ यह बिना चेतावनी देता है -Wall -pedantic
:
चेतावनी: 'रहस्यमय :: सक्षम' 'एनम BOOL' के सभी मूल्यों को रखने के लिए बहुत छोटा है
struct mystruct { BOOL enabled:1; };
आउटपुट है:
अक्षम है !! (उपयोग करते समय enum BOOL : int
)
यदि enum BOOL : int
इसे सरल बनाया जाता है enum BOOL
, तो आउटपुट मानक मान के अनुसार होता है:
सक्षम है (उपयोग करते समय enum BOOL
)
इसलिए, यह निष्कर्ष निकाला जा सकता है, जैसा कि कुछ अन्य उत्तरों में है, वह int
प्रकार केवल "बिट" को केवल एक बिट बिट-फ़ील्ड में संग्रहीत करने के लिए पर्याप्त बड़ा नहीं है।
int
मुझे लगता है कि यह केवल मूल्यों को पकड़ सकता है0
और-1
।