this answer और संलग्न टिप्पणियां, Pavel Minaev निम्न तर्क देता है कि, सी में, केवल uint8_t
टाइप किए गए प्रकार टाइप किए जा सकते हैं char
और unsigned char
। मैं सी मानक के this draft पर देख रहा हूं।क्या uint8_t गैर-वर्ण प्रकार हो सकता है?
uint8_t
की उपस्थिति एक इसी प्रकारint8_t
(7.18.1p1) की उपस्थिति का तात्पर्य।int8_t
8 बिट चौड़ा है और इसमें कोई पैडिंग बिट्स नहीं है (7.18.1.1p1)।- अनुरूप प्रकारों की एक ही चौड़ाई (6.2.5 पी 6) है, इसलिए
uint8_t
भी 8 बिट चौड़ा है। unsigned char
CHAR_BIT
बिट्स चौड़ा (5.2.4.2.1p2 और 6.2.6.1p3) है।CHAR_BIT
कम से कम 8 (5.2.4.2.1p1) है। क्योंकि या तोuint8_t
unsigned char
है, या यह एक गैरunsigned char
, गैर बिट फ़ील्ड प्रकार जिसका चौड़ाईCHAR_BIT
(6.2.6.1p4) की एक बहु हैCHAR_BIT
, अधिक से अधिक 8 है।
इस तर्क के आधार पर, मैं मानता हूँ कि, अगर uint8_t
मौजूद है, तो दोनों यह और unsigned char
समान निरूपण है: 8 मूल्य बिट्स और 0 गद्दी बिट्स। ऐसा लगता है कि उन्हें एक ही प्रकार (उदाहरण के लिए, 6.2.5 पी 14) होने के लिए मजबूर नहीं किया जाता है।
यह अनुमति दी है कि uint8_t
unsigned char
के रूप में ही प्रतिनिधित्व के साथ एक विस्तारित अहस्ताक्षरित पूर्णांक प्रकार (6.2.5p6) को typedef'd है? निश्चित रूप से इसे टाइप किया जाना चाहिए (7.18.1.1p2), और यह unsigned char
(या char
के अलावा किसी भी मानक हस्ताक्षरित पूर्णांक प्रकार नहीं हो सकता है अगर यह हस्ताक्षरित होता है)। यह काल्पनिक विस्तारित प्रकार एक वर्ण प्रकार (6.2.5 पी 15) नहीं होगा और इस प्रकार एक असंगत प्रकार (6.5 पी 7) की किसी ऑब्जेक्ट पर एलियाड एक्सेस के लिए अर्हता प्राप्त नहीं होगा, जो मुझे संकलित करता है क्योंकि एक कंपाइलर लेखक ऐसा करना चाहता है चीज़।
नहीं आपकी स्पष्ट प्रश्न का उत्तर है, लेकिन यह संभव है कि 'चार: यह मंच पर निर्भर है कि क्या है 'एक हस्ताक्षरित प्रकार है, फिर' uint8_t' को 'char' के बजाय 'char'' टाइप किया जा सकता है nsigned char'। –
एक बिंदु पर (कई साल पहले) जीसीसी परियोजना के भीतर एक विस्तृत पूर्णांक प्रकार जोड़ने की गंभीर चर्चा थी जिसमें आप वर्णित गुणों के साथ --- आठ बिट्स चौड़े, चरित्र प्रकार नहीं, और प्रकार में एक विशेष मामला नहीं है आधारित उपनाम विश्लेषण --- लेकिन जहां तक मुझे पता है कि यह कभी भी कहीं नहीं गया था, और 'uint8_t' के लिए अंतर्निहित प्रकार होने का कोई सुझाव नहीं था (संभवतः सिर्फ इसलिए कि उस समय किसी ने इसके बारे में सोचा नहीं था)। – zwol
ध्यान दें कि 'uint8_t' बिल्कुल मौजूद नहीं है। यह केवल सशर्त रूप से परिभाषित है। –