2013-04-26 11 views
7

के बीच अंतर uint8_t और __u8 के बीच अंतर को समझा सकता है?__u8 और uint8_t

मुझे पता है कि uint8_t stdint.h में परिभाषित हैं और वे प्रत्येक यूनिक्स सिस्टम पर उपलब्ध हैं।

/* Unsigned. */ 
typedef unsigned char  uint8_t; 
typedef unsigned short int uint16_t; 
... 

और यदि मैं उन्हें पहचानने का इरादा रखता हूं तो मैं इसका क्या इरादा रखता हूं।

अब मैं __u8 और __u16 प्रकारों पर ठोकर खा गया। ऐसा लगता है कि मेरे जैसा ही है।

उन प्रकार के कुछ

लिनक्स में परिभाषित कर रहे हैं/types.h

#ifdef __CHECKER__ 
#define __bitwise__ __attribute__((bitwise)) 
#else 
#define __bitwise__ 
#endif 
#ifdef __CHECK_ENDIAN__ 
#define __bitwise __bitwise__ 
#else 
#define __bitwise 
#endif 

typedef __u16 __bitwise __le16; 
typedef __u16 __bitwise __be16; 
typedef __u32 __bitwise __le32; 
... 

मैं did not __u8 लगता है, लेकिन मैं अभी भी इसे उपयोग कर सकते हैं और यह uint8_t तरह बर्ताव करता है।

प्रदर्शन या स्मृति खपत में कुछ अंतर है? मदद के लिए

धन्यवाद :)

+7

आपके लिए ऑफ-सीमा में दो आसन्न अंडरस्कोर के साथ कुछ भी विचार करें। –

+2

पहचानकर्ताओं में अग्रणी अंडरस्कोर के बारे में [यह प्रश्न] देखें (http://stackoverflow.com/q/228783/440558)। –

+0

'uint8_t' उन प्रणालियों पर उपलब्ध है जहां मूल आठ प्रकार के साथ मूल प्रकार है। यदि ऐसा कोई प्रकार नहीं है, तो 'uint8_t' परिभाषित नहीं किया गया है। इसका यूनिक्स, लिनक्स, ओएस एक्स, या जो भी कुछ भी नहीं है। यह उस हार्डवेयर के बारे में है जिस पर प्रोग्राम चल रहा है। –

उत्तर

12

uintn_t typedefs * निर्दिष्ट C99 द्वारा (<stdint.h> में) और सी ++ 11 मानकों (<cstdint> में) कर रहे हैं। सभी नए कंपाइलर्स इन्हें प्रदान करते हैं और कुछ प्राचीन लोगों को आसानी से प्राप्त करने के लिए अपर्याप्त परिभाषा आसान होती है, इसलिए पोर्टेबिलिटी हमेशा इसका उपयोग करती है।

__un लिनक्स-विशिष्ट टाइपपीफ हैं जो उन मानकों की भविष्यवाणी करते हैं। वे पोर्टेबल नहीं हैं। डबल अंडरस्कोर का उपयोग गैर-मानक परिभाषा को इंगित करने के लिए किया जाता है।

* 8, 16, 32 और 64 के लिए वे अगर संकलक है कि आकार का एक प्रकार है परिभाषित किया जाएगा, अतिरिक्त लोगों में परिभाषित किया जा सकता है।

+0

'[u] int [8,16,32,64] _t' को C99/C11 और न ही C++ 11 मानक की आवश्यकता नहीं है। यदि वे सिस्टम पर सटीक-चौड़ाई प्रकार उपलब्ध हैं तो वे वैकल्पिक 'टाइपपीफ' हैं। – rubenvb

+2

@ 0x90: और वे कहां निर्दिष्ट हैं? –

+2

@ रूबेनव: एक स्पष्टीकरण - जबकि सटीक-चौड़ाई पूर्णांक प्रकार सामान्य रूप से वैकल्पिक होते हैं, तो आकार 8, 16, 32, और 64 के आकार वाले टाइपपीफ को सी 99 और सी 11 द्वारा आवश्यक होता है यदि प्लेटफ़ॉर्म में उन पूर्णांक प्रकार होते हैं (दो के पूरक प्रतिनिधित्व में हस्ताक्षरित रूपों के लिए)। –

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