2009-05-26 18 views
29

मैं सी ++ के लिए काफी नया हूं, लेकिन मुझे मूलभूत सिद्धांतों का लटका मिल गया है। मैं दूसरे कोड को पढ़ने के दौरान "यूंट 32" (विभिन्न पूंजीकरण में) और इसी तरह के डेटा प्रकारों के उपयोग में आया हूं, लेकिन मुझे उनका उल्लेख करने वाले दस्तावेज नहीं मिल रहे हैं। मैं समझता हूं कि "यूंट 32" 32 बिट्स के साथ एक हस्ताक्षरित int है, लेकिन मेरा कंपाइलर नहीं करता है। मैं विजुअल सी ++ एक्सप्रेस का उपयोग कर रहा हूं, और यह जो भी मैं बता सकता हूं उससे किसी भी रूप को पहचान नहीं पा रहा हूं।"यूंट 32", "int16" और जैसा; क्या वे मानक सी ++ हैं?

क्या कुछ कंपाइलर्स हैं जो डिफ़ॉल्ट रूप से उन डेटा प्रकारों को पढ़ते हैं, या क्या इन प्रोग्रामर ने उन्हें स्वयं कक्षाओं या # परिभाषित स्थिरांक घोषित किया है?

मैं उनका उपयोग करने में एक बिंदु देख सकता हूं कि यह जानने के लिए कि आपका पूर्णांक कितना समय होगा, क्योंकि सामान्य घोषणा प्रणाली के आधार पर भिन्न होती है। क्या कोई अन्य पेशेवर या विपक्ष उनका उपयोग कर रहा है?

उत्तर

11

विज़ुअल सी ++ निश्चित-चौड़ाई पूर्णांक प्रकारों का समर्थन नहीं करता है, क्योंकि इसमें C99 के लिए समर्थन शामिल नहीं है। आपके पास उपयोग करने के लिए विभिन्न विकल्पों के लिए my question on this subject के उत्तरों देखें।

+3

बहुत अच्छा। मुझे लगता है कि इसके लिए मैं बूस्ट लाइब्रेरी का उपयोग करूँगा क्योंकि यह क्रॉसप्लेटफार्म है। बहुत कम माइक्रोसॉफ्ट और उनके अपने-अपने-अपने तरीके के सिद्धांतों। – Zoomulator

+3

माइक्रोसॉफ्ट वास्तव में यहां दोष नहीं दे रहा है: वे मानक के लिए सख्ती से पालन करते हैं: सी ++ को अभी तक कोई मानकीकृत निश्चित आकार संख्या प्रकार नहीं मिला है। –

+1

मैं बूस्ट प्रकारों का भी उपयोग करता हूं। अंततः माइक्रोसॉफ्ट इन प्रकारों का समर्थन करेगा क्योंकि वे सी ++ मानक का हिस्सा होंगे। –

13

सी 99 हेडर फ़ाइल stdint.h फॉर्म uint32_t के इस प्रकृति के टाइपपीफ को परिभाषित करता है। जहां तक ​​मुझे पता है, मानक सी ++ नामस्थान std में प्रतीकों के साथ इसका एक cstdint संस्करण प्रदान नहीं करता है, लेकिन कुछ कंपाइलर हो सकते हैं, और आप आमतौर पर सी ++ कोड से सी 99 हेडर को शामिल करने में सक्षम होंगे। सी ++ का अगला संस्करण सीस्टडिंट हेडर प्रदान करेगा।

आप अक्सर अन्य लोगों को जो इस तरह के Uint32_t या Uint32 या uint32 आदि के रूप में इस विषय के गैर मानक रूपों का उपयोग वे आम तौर पर सिर्फ एक हैडर उस प्रोजेक्ट के अंतर्गत इन प्रकार परिभाषित करता है प्रदान करते हैं से कोड दिखाई देगा। शायद यह कोड मूल रूप से बहुत समय पहले विकसित हुआ था, और जब कभी सी 99 कंपाइलर आम हो गए तो उन्होंने परिभाषाओं को प्रतिस्थापित करने के लिए कभी भी परेशान नहीं किया।

+0

कम से कम नहीं क्योंकि एमएसवीसी प्रकारों पर उत्सुक प्रतीत नहीं होता है: डी –

1

माइक्रोसॉफ्ट के लिए यूआईएनटी 32 का प्रयास करें।

ऊपरी मामला यह स्पष्ट करता है कि इसे मैक्रो के रूप में परिभाषित किया गया है। यदि आप किसी भिन्न कंपाइलर का उपयोग करके संकलित करने का प्रयास करते हैं जिसमें पहले से ही मैक्रो नहीं है, तो आप इसे स्वयं परिभाषित कर सकते हैं और आपके कोड को बदलने की आवश्यकता नहीं है।

3

उनका उपयोग करने का मुख्य कारण यह है कि आपको 64 बिट और 32 बिट ओएस के बीच स्विच करते समय उत्पन्न होने वाली किसी भी संभावित समस्या के बारे में चिंता करने की ज़रूरत नहीं है।

यदि आप किसी भी विरासत कोड में इंटरफेस कर रहे हैं, तो आप 32 बिट या 16 बिट के लिए नियत थे तो यह संभावित समस्याओं से भी बचाता है।

+0

क्रॉस प्लेटफार्म परियोजनाओं के साथ काम करते समय ध्यान में रखना एक अच्छी बात है, मुझे यकीन है। – Zoomulator

+0

वे वितरित अनुप्रयोगों को लागू करते समय भी काफी उपयोगी होते हैं जहां क्लाइंट और सर्वर के बीच तार पर पूर्णांक भेजे जाने वाले पूर्णांक एक विशिष्ट आकार का होना चाहिए, जैसा कि उनके संचार प्रोटोकॉल द्वारा परिभाषित किया गया है। – Void

19

यूनिक्स प्लेटफ़ॉर्म stdint.h में इन प्रकारों को परिभाषित करते हैं, यह पोर्टेबल कोड लिखते समय आकार आकार सुनिश्चित करने का पसंदीदा तरीका है।

माइक्रोसॉफ्ट के प्लेटफ़ॉर्म इस हेडर को परिभाषित नहीं करते हैं, जो क्रॉस-प्लेटफॉर्म पर जाने पर एक समस्या है। यदि आप पहले से ही Boost Integer Library का उपयोग नहीं कर रहे हैं, तो मैं अनुशंसा करता हूं कि माइक्रोसॉफ्ट प्लेटफ़ॉर्म पर उपयोग के लिए पॉल हेसीह के portable stdint.h कार्यान्वयन के लिए इस शीर्षलेख का कार्यान्वयन करें।

अद्यतन: विजुअल स्टूडियो 2010 और बाद में इस हेडर को परिभाषित करता है।

1

uint32 et al। मैक्रोज़ द्वारा परिभाषित किया गया है। जब आप एक इंट या शॉर्ट के लिए पूछते हैं तो आप कितने बिट्स प्राप्त करेंगे, इसके प्लेटफॉर्म पर वापस कुछ गारंटीएं होने पर एक ऐतिहासिक पोर्टेबिलिटी समस्या हल होती है (जब अब से अधिक प्लेटफॉर्म विकल्प होते हैं)। (मैक के लिए एक अब-निष्क्रिय सी संकलन 8-बिट शॉर्ट्स प्रदान किया गया है!)।

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