2017-01-03 5 views
6

एक जीसीसी उपयोगकर्ता होने के नाते, मैंने अभी देखा है कि क्लैंग uint24_t प्रकार का समर्थन करता है (यह वैसे भी उनके stdint.h में है)।क्लैंग के uint24_t कैसे काम करता है? क्या मैं इसे क्लैंग/एलएलवीएम के बाहर उपयोग कर सकता हूं?

यह कैसे काम करता है? मेरा मतलब है, क्या यह पूरी तरह से आंतरिक रूप से समर्थित है, एक भाषा विस्तार के रूप में, या इसे सी ++ वर्ग की तरह लागू किया गया है, जिसमें 3 बाइट्स या 16-बिट मान और कुछ 8-बिट मान पर कुछ अमूर्तता है? और - जीसीसी के साथ इस तरह के कार्यान्वयन को 'यंक' करना कितना संभव है और इसे स्वयं का उपयोग करें?

नोट:

  • मैं आधुनिक सी में एक uint24_t की तरह वर्ग के लिए देख रहा हूँ ++ (या एक uint_t<N> अधिक आम तौर पर); मेरा विकल्प अपना खुद का रोलिंग कर रहा है।
  • यदि आप इस प्रश्न में हैं तो आप s/uint/int/g; कर सकते हैं।
+0

मैं x86-64 पर हूँ, 3.9 बजना। 1, और निर्देशिका शामिल करने के माध्यम से grepping केवल बढ़ावा के लिए परिणाम मिले। कृपया अपने सिस्टम की रिपोर्ट करें। – Downvoter

+0

@ डाउनवॉटर: मैं इसे देख रहा हूं [यहां] (http://clang.llvm.org/doxygen/stdint_8h-source.html) वास्तव में। और - यह आपके पास एक डरावना उपनाम है। – einpoklum

उत्तर

3

यह पोर्टेबल या मानक नहीं है। यह केवल एवीआर (जिसमें 24-बिट पते हैं), और GCC has it for that architecture, too (जीसीसी v4.7 के बाद) के लिए मौजूद है।

यदि आर्किटेक्चर देशी 24-बिट पूर्णांक का समर्थन नहीं करता है, तो इसे परिभाषित नहीं किया जाएगा।

आप Clang's stdint.h header file में देखो, तो आप देखेंगे कि 24-बिट पूर्णांक typedefs सशर्त शामिल किए गए हैं केवल जब आंतरिक __INT24_TYPE__ प्रतीक परिभाषित किया गया है:

#ifdef __INT24_TYPE__ 
typedef __INT24_TYPE__ int24_t; 
typedef __UINT24_TYPE__ uint24_t; 
typedef int24_t int_least24_t; 
typedef uint24_t uint_least24_t; 
typedef int24_t int_fast24_t; 
typedef uint24_t uint_fast24_t; 
# define __int_least16_t int24_t 
# define __uint_least16_t uint24_t 
# define __int_least8_t int24_t 
# define __uint_least8_t uint24_t 
#endif /* __INT24_TYPE__ */ 
+0

मुझे यकीन नहीं है कि एवीआर के लिए 24 बिट पूर्णांक "मूल" कैसे है, आईआईआरसी एवीआर में 8 बिट रजिस्ट्रार हैं, और 24 बिट अंकगणित x86_64 पर __int128 के समान ही लागू किया गया है, नहीं? –

+0

मुझे वास्तव में यह सुनिश्चित नहीं है कि इसे कैसे लागू किया गया है, @marc, लेकिन एवीआर पते के लिए 24-बिट मानों का उपयोग करता है, इसलिए उन मानों का प्रतिनिधित्व करने का कोई तरीका होना आवश्यक है। यह शायद अंकगणितीय परिचालनों को अनुकरण करना है, क्योंकि रजिस्ट्रार केवल 8 बिट चौड़े हैं। –

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

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