सी 99 मानक और (मुझे लगता है) कुछ संस्करण या आईएसओ सी ++ के द्वारा परिभाषित एक stdint.h शीर्षलेख है। यह int16_t, uint64_t, आदि जैसे अच्छे प्रकार को परिभाषित करता है ... जिन्हें एक विशिष्ट आकार और प्रतिनिधित्व करने की गारंटी है। दुर्भाग्यवश, यह उपलब्धता बिल्कुल मानक नहीं है (माइक्रोसॉफ्ट विशेष रूप से यहां एक पैर ड्रैगर था)।
सरल उत्तर यह है जो हर 32 या 64 बिट बाइट-पता वास्तुकला पर काम करता है, मैं के बारे में पता कर रहा हूँ:
- सभी चार चर 1 बाइट हैं
- सभी लघु चर 2 बाइट्स
हैं
- सभी int चर 4 बाइट
- "लंबे" का उपयोग न करें, जो अनिश्चित आकार का है।
- 64 बिट गणित के लिए समर्थन के साथ सभी ज्ञात कंपाइलर देशी 64 बिट प्रकार के रूप में "लंबे समय तक" अनुमति देते हैं।
, पता है कि कुछ 32 बिट compilers एक 64 बिट प्रकार बिल्कुल नहीं है रहो इतने लंबे समय के लंबे समय तक उपयोग करते हुए 64 बिट सिस्टम के लिए आप को सीमित कर देगा और compilers का एक छोटा समूह (जो जीसीसी और MSVC शामिल हैं, इसलिए सबसे लोगों को इस समस्या की परवाह नहीं होगी)। BOOST cstdint
आमतौर पर खुद पहिया (जो रखरखाव और परीक्षण पड़ता है) की खोज की तुलना में बेहतर:
स्रोत
2009-09-06 13:56:14
मैंने कुछ प्लेटफ़ॉर्म पर 'int' को 64-बिट के रूप में देखा है। 'लंबा लंबा 'सी ++ में गैर मानक है और केवल' लंबे' से बराबर या बड़ा आकार होने की गारंटी है। कुछ दुर्लभ प्रणालियों पर 'char', 16-बिट है। ये पोर्टेबल मान्यताओं को आप नहीं बना रहे हैं। यही कारण है कि Win32 या Linux-32 से 64-बिट पर पोर्ट होने पर इतना सॉफ़्टवेयर परेशानी होती है। – greyfade
इस तरह की प्रतिक्रिया है कि मैंने पोर्टेबल उत्तर के साथ क्यों शुरुआत की। लेकिन मुझे खेद है, आपके पैडेंट्री में सबूत नहीं हैं। मुझे कहीं भी कोई मंच नहीं पता है जो 64 बिट्स को int परिभाषित करता है। "लंबे समय तक" वास्तव में, गैर मानक है। फिर भी यह आश्चर्यजनक है कि यह किसी भी मानक 64 बिट प्रकार की तुलना में कंपाइलरों में कहीं अधिक पोर्टेबल है; यह मुझे परेशान करता है कि लोग इसे स्वीकार करने में विफल रहते हैं। लक्ष्य पोर्टेबिलिटी है, मानक नहीं। मेरा जवाब व्यावहारिक पोर्टेबिलिटी चिंताओं के बारे में था। –