2011-02-04 30 views

उत्तर

131

यह कार्यान्वयन परिभाषित किया गया है, और मानक स्पष्ट करने पर उल्लेखनीय जोर देता है।

§5.3.3/1, संक्षिप्त:

sizeof(char), sizeof(signed char) और sizeof(unsigned char) 1 कर रहे हैं; sizeof का परिणाम किसी अन्य मौलिक प्रकार पर लागू कार्यान्वयन-परिभाषित है। [नोट: विशेष रूप से, sizeof(bool) और sizeof(wchar_t) कार्यान्वयन-परिभाषित हैं। 69)]

फ़ुटनोट 69):

sizeof(bool) होने की आवश्यकता नहीं है 1.

+44

+1 जोर देने के लिए! –

+19

+1 फुटनोट के लिए +1। जो जोर देता है ;-) – Nawaz

+0

क्या कोई झंडा है जिसके लिए मुझे अपने प्रोग्राम को संकलित करने की आवश्यकता है, कि मेरा कंपाइलर 'बूल' के लिए केवल 1 बाइट का उपयोग करेगा? – Eagle

10

यह कार्यान्वयन परिभाषित किया गया है। मानक द्वारा केवल sizeof(char)1 है।

+1

कृपया ध्यान दें कि मानक में 1 से 4 बाइट हो सकता है। से हर प्रकार 4. का एक उत्पाद तो है परवाह मानक ही परिभाषित करता है कि चार 1 है, लेकिन माप को परिभाषित करता है नहीं। – user3063349

+0

1 का अर्थ है 8 बिट या मानक – paulm

+6

1 बाइट में 1 बाइट। बाइट प्रति बिट्स की संख्या मानक से परिभाषित नहीं है (इस पर होने की जरूरत है कम से कम 8 आईआईआरसी), लेकिन 'climits' में परिभाषित 'CHAR_BIT' में पाया जा सकता है, – peoro

3

देखें 5.3.3 अनुच्छेद 1:

[नोट : विशेष रूप से, आकार (बूल) और आकार (wchar_t) हैं कार्यान्वयन-defined.69)]

13

http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

"विजुअल C++ 4.2 में, मानक सी ++ हेडर फाइल एक typedef कि पूर्णांक के साथ bool बराबर होता है। विजुअल सी ++ 5.0 और बाद में, बूल को 1 बाइट के आकार के साथ अंतर्निर्मित प्रकार के रूप में कार्यान्वित किया जाता है। इसका मतलब है कि विजुअल सी ++ 4.2 के लिए, विज़ुअल सी ++ 5.0 और बाद में, आकार कॉल (बूल) की एक कॉल 4 उत्पन्न होती है, वही कॉल उत्पन्न होती है 1. यदि आप विज़ुअल सी ++ में टाइप बूल के स्ट्रक्चर सदस्यों को परिभाषित करते हैं तो यह स्मृति भ्रष्टाचार की समस्याएं पैदा कर सकता है। 4.2 और मिश्रण कर रहे हैं वस्तु फ़ाइलें (OBJ) और/या 4.2 और 5.0 या बाद compilers के साथ बनाया गया DLLs। "

+1

आपको एहसास है कि यह कुछ हद तक सवाल से संबंधित है, लेकिन स्पष्ट रूप से कोई जवाब नहीं है, क्योंकि 0xbadf00d ने मानक के बारे में पूछा, कुछ विशिष्ट/मनमाने ढंग से चयनित कंपाइलर कार्यान्वयन नहीं, है ना? –

+10

@ क्रिस्टोफरक्रेटज़िग यह counterexample द्वारा एक सबूत है। – kinokijuf

+7

@kinokijuf यह एक counterexample नहीं है। विजुअल सी ++ में कई चीजें हैं जो मानक-अनुरूप नहीं हैं। – 0xbadf00d

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