संभव डुप्लिकेट:
What is the size of void?आकार (शून्य) == 1 क्यों है?
§6.2.5.19 में, भविष्यद्वक्ताओं हमें यह बताने:
के एक खाली सेट निहित होता है
void
प्रकार मान
n sizeof(void)
उपज 1 क्यों होता है, जब 0 पर्याप्त लगता है?
संभव डुप्लिकेट:
What is the size of void?आकार (शून्य) == 1 क्यों है?
§6.2.5.19 में, भविष्यद्वक्ताओं हमें यह बताने:
के एक खाली सेट निहित होता है
void
प्रकार मान
n sizeof(void)
उपज 1 क्यों होता है, जब 0 पर्याप्त लगता है?
sizeof(void)
एक सी संकलक पर संकलन नहीं होंगे।
आईएसओ 98 99: 2011 6.2।5/19
"शून्य प्रकार में मूल्यों का एक खाली सेट शामिल है; यह एक अपूर्ण ऑब्जेक्ट प्रकार है जिसे पूरा नहीं किया जा सकता है।"
आईएसओ 9899: 2011 6.5.3.4/1
"sizeof ऑपरेटर एक अभिव्यक्ति समारोह प्रकार या एक अधूरा प्रकार है कि करने के लिए लागू नहीं किया जाएगा"
यह प्रामाणिक पाठ है : आकार (शून्य) वैध सी नहीं है
... और फिर भी यह जीसीसी के साथ संकलित करता है, क्योंकि यह एक जीसीसी एक्सटेंशन है। http देखें : //gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith – Philip
मुझे आश्चर्य है कि यह ओपी के प्रश्न का उत्तर कैसे देता है ... – ThiefMaster
@ फिलिप हां वास्तव में, लेकिन यह होगा एक सी कंपाइलर के एक अनुरूप कार्यान्वयन पर संकलित नहीं। – Lundin
यह एक जीसीसी विस्तार है: http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Pointer-Arith.html#Pointer-Arith
GNU सी में, जोड़ और घटाव के संचालन
void
की ओर इशारा पर और कार्यों के लिए संकेत पर समर्थित हैं। यह एकvoid
के आकार के इलाज के द्वारा या के रूप में 1.इस का एक परिणाम यह है कि
sizeof
भीvoid
पर और समारोह प्रकार पर अनुमति दी है, और रिटर्न 1.विकल्प
-Wpointer-arith
अनुरोध है एक समारोह के लिए किया जाता है अगर इन एक्सटेंशन का उपयोग किया जाता है तो एक चेतावनी। और एक तत्व के आकार की ओर इशारा किया -
कारण है कि void
एक आकार की जरूरत है इस तरह के arithmetics प्रदर्शन करने के लिए है कि ptr - ptr2
वास्तव में ऐसा नहीं करता आप पतों की संख्यात्मक अंतर लेकिन तत्वों की संख्या दो संकेत अलग कर रहे हैं देता है void *ptr
sizeof(*ptr)
है जो sizeof(void)
है।
यदि यह एक एक्सटेंशन है, तो 'gcc -std = c99 -pedantic' आकार (शून्य) == 1 क्यों देता है? -पैडेंटिक एक शून्य प्रकार के आकार का उपयोग करने के लिए एक चेतावनी देता है, लेकिन कोड संकलित करता है और प्रिंट करता है 1. – Lundin
@ लुंडिन: क्योंकि आपने '-pedantic' का उपयोग किया था, न कि '-pedantic-त्रुटियों' – Christoph
@ क्रिस्टोफ मेरी राय में, यह होना चाहिए -std = c99 ध्वज सेट करने के लिए पर्याप्त है और फिर इसे कोड को त्रुटियों के बिना संकलित करने की अनुमति भी नहीं देनी चाहिए। – Lundin
आप शायद जीसीसी, या कुछ अन्य कंपाइलर का उपयोग कर रहे हैं जो इसे एक एक्सटेंशन के रूप में करता है (सी, आकार (शून्य) में मान्य नहीं है)।
जीसीसी का कहना है:
GNU सी में, जोड़ और घटाव के संचालन संकेत शून्य करने के बारे में और कार्यों के लिए संकेत पर समर्थित हैं। यह एक शून्य की आकार के इलाज के द्वारा या के रूप में 1.
एक समारोह इस का एक परिणाम यह है कि sizeof भी शून्य पर और समारोह प्रकार पर अनुमति दी है, और रिटर्न 1.
विकल्प है के लिए किया जाता है -Ppointer-arith एक चेतावनी का अनुरोध करता है यदि ये एक्सटेंशन उपयोग किए गए हैं।
... और यह §6.5.3.4.1 की वजह से अमान्य है: "आकार का ऑपरेटर उस अभिव्यक्ति पर लागू नहीं किया जाएगा जिसमें फ़ंक्शन प्रकार या अधूरा प्रकार है, इस प्रकार के संश्लेषित नाम पर, या एक अभिव्यक्ति जो बिट-फील्ड सदस्य को निर्दिष्ट करती है "और §6.2.5.19:" 'शून्य 'एक" अपूर्ण प्रकार है जिसे पूरा नहीं किया जा सकता है। " – Philip
http://stackoverflow.com/questions/1666224/what-is-the-size-of-void –
इस प्रश्न और उसके पुराने डुप्लिकेट के बीच एक अंतर है: यह एक है स्वीकृत उत्तर में एसी शामिल है दोहरी सबूत – Philip
http://meta.stackexchange.com/questions/32311/do-not-delete-duplicates – Flexo