जैसा कि आरके ने कहा, सी ++ स्ट्रीम इंटरफ़ेस हमेशा पोर्ट्रेट रूप से काम करेगा।
std :: size_t s = 1024; std :: cout << s; // या किसी भी अन्य प्रकार की धारा की तरह स्ट्रिंगस्ट्रीम!
यदि आप C stdio चाहते हैं, तो "पोर्टेबल" के कुछ मामलों के लिए इसका कोई पोर्टेबल उत्तर नहीं है। और यह बदसूरत हो जाता है क्योंकि आपने देखा है, गलत प्रारूप वाले झंडे उठाने से संकलक चेतावनी दे सकता है या गलत आउटपुट दे सकता है।
C99 ने इस समस्या को "%" PRIdMAX "\ n" जैसे inttypes.h प्रारूपों के साथ हल करने का प्रयास किया। लेकिन जैसे "% zu" के साथ, हर कोई c99 का समर्थन नहीं करता (जैसे 2013 से पहले MSVS)। इससे निपटने के लिए "msinttypes.h" फाइलें चल रही हैं।
यदि आप एक अलग प्रकार के लिए जाते हैं, तो झंडे के आधार पर आपको ट्रंकेशन या साइन बदलने के लिए एक कंपाइलर चेतावनी मिल सकती है। यदि आप इस मार्ग पर जाते हैं, तो एक बड़ा प्रासंगिक निश्चित आकार प्रकार चुनें। अहस्ताक्षरित लंबी लंबी और "% लुल्ल" या अहस्ताक्षरित लंबी "% लू" में से एक को काम करना चाहिए, लेकिन लुल्लू 32 वें विश्व में चीजों को अत्यधिक बड़े रूप में धीमा कर सकता है। (संपादित करें - मेरा मैक 64% में एक चेतावनी जारी करता है% llu के लिए size_t से मेल नहीं खाता है, भले ही% lu,% llu, और size_t सभी समान आकार के हैं। और% lu और% llu, आपके MSVS2012 पर समान आकार नहीं हैं। आपको एक ऐसे प्रारूप का उपयोग करना होगा जो मेल खाता हो।)
उस मामले के लिए, आप निश्चित आकार प्रकारों के साथ जा सकते हैं, जैसे कि int64_t। लेकिन रुकें! अब हम c99 / c ++ 11 पर वापस आ गए हैं, और पुराने MSVS फिर से विफल हो जाते हैं। साथ ही आपके पास कास्ट्स भी हैं (उदाहरण के लिए map.size () एक निश्चित आकार प्रकार नहीं है)!
आप एक 3 पार्टी हेडर या लाइब्रेरी जैसे बूस्ट का उपयोग कर सकते हैं। यदि आप पहले से ही एक का उपयोग नहीं कर रहे हैं, तो आप अपने प्रोजेक्ट को इस तरह से बढ़ाना नहीं चाह सकते हैं। यदि आप इस मुद्दे के लिए सिर्फ एक जोड़ने के लिए तैयार हैं, तो c ++ स्ट्रीम या सशर्त संकलन का उपयोग क्यों न करें?
इसलिए आप सी + + स्ट्रीम, सशर्त संकलन, 3 पार्टी फ्रेमवर्क, या कुछ प्रकार के पोर्टेबल के लिए नीचे हैं जो आपके लिए काम करते हैं।
unsigned long
यदि आपका एफबीआईसी कार्यान्वयनz
संशोधक का समर्थन नहीं करता है तो कास्टिंग सबसे अच्छा विकल्प है ; C99 मानकsize_t
एक पूर्णांक रूपांतरण रैंक की तुलना में अधिक नहीं होने की सलाह देता हैlong
, इसलिए आप यथोचित रूप से सुरक्षित हैं