2010-03-07 20 views
18
  • अब यह अब तक का सबसे बड़ा पूर्णांक प्रकार नहीं है कि "लंबा लंबा" है।
  • यह निश्चित-चौड़ाई प्रकार नहीं है: यह कुछ प्लेटफॉर्म पर 32 बिट्स और 64 पर अन्य बिट्स है।
  • यह जरूरी सूचक के रूप में एक ही आकार नहीं है (उदाहरण के लिए, 64-बिट Windows पर)

तो, करता है "लंबे समय" कोई अर्थ अब और है? क्या किसी भी ptrdiff_t या int64_t के बजाय लंबे समय तक घोषित करने का कोई कारण है?सी में अभी भी "लंबा" उपयोगी है?

उत्तर

5

still useful और something you should habitually use के बीच एक सूक्ष्म अंतर है। long प्रकार अभी भी बढ़ता है, Chris Lutz noted कई सिस्टम और प्लेटफ़ॉर्म विशिष्ट प्रकारों के पीछे (हालांकि, आमतौर पर हस्ताक्षरित के रूप में)।

जब आप जानते हैं डेटा हमेशा आपके साथ है कि प्रकार (चाव से, बेहतर आप भी जानते हैं signedness) में फिट करने के लिए जा रहा है काम हो जाएगा, वहाँ कोई विशेष कारण नहीं इसका इस्तेमाल करने के लिए है, विशेष रूप से यदि आपके पास काम करने के लिए संरचना में सीमित स्थान है।

हालांकि, ज्यादातर मामलों में, भविष्य के रखरखाव के लिए, जहां भी संभव हो intxx_t या uintxx_t का उपयोग करना बेहतर होता है। उदाहरण के लिए, आप नहीं जानते हैं कि यूनिक्स युग की तारीख हमेशा 32 बिट प्लेटफार्मों (इसलिए, time_t) पर एक हस्ताक्षरित लंबे समय तक फिट होगी, जब तक कि आपके पास यह अच्छा अधिकार न हो कि दुनिया खत्म होने से पहले खत्म हो जाएगी :) कम से कम एक निश्चित आकार पूर्णांक विचार के लिए

+4

ठीक है, 2012 चुटकुले का मुकदमा ... –

+2

मैं तर्क दूंगा कि जब तक आपके पास * बिल्कुल * एक्सएक्स बिट्स की आवश्यकता नहीं है, तो आपको 'intXX_t' का उपयोग नहीं करना चाहिए। आम तौर पर आपको वास्तव में * कम से कम * एक्सएक्स बिट्स की आवश्यकता होती है, इस मामले में आप एक्स के लिए 'int' का उपयोग कर सकते हैं <= 16; 16 <एक्स <= 32 के लिए 'लंबा'; और 32 caf

+1

@caf: इसके साथ बहस करना असंभव है। हालांकि, मेरे द्वारा लिखे गए बहुत सारे कोड इस विचार के साथ लिखे गए हैं कि एक निश्चित सदस्य कभी भी एक निश्चित प्रकार से बड़ा नहीं होगा, जब वास्तव में सबकुछ वास्तव में योजना के मुकाबले बहुत छोटा हो जाता है। अक्सर जब आपको क्वेरी परिणाम धारण करना पड़ता है, तो सामानों के सेट को सारणीबद्ध करें जो अन्य चीजें crunched, आदि। मुझे लगता है कि मैं कुशल से अधिक रक्षात्मक हूँ, लेकिन मेरे पास ज्यादातर समय पसंद नहीं है :) –

17

क्या कभी भी ptrdiff_t या int64_t के बजाय लंबे समय तक घोषित करने का कोई कारण है?

उन मामलों में कभी नहीं था। यदि आप एक सूचक अंतर चाहते हैं, या विशेष रूप से 64-बिट मान चाहते हैं, तो आपको ptrdiff_t या int64_t का उपयोग करना चाहिए। प्लेटफार्म-निर्भर typedef के पीछे शायद आपको पहले स्थान पर long का उपयोग कभी नहीं करना चाहिए था।

आप long का उपयोग करना चाहिए जब आप कम से कम एक 32-बिट पूर्णांक की जरूरत है, क्योंकि int केवल कम से कम 16 बिट होने की गारंटी है। यदि आपको मूल प्रकार की आवश्यकता है, लेकिन कम से कम 32-बिट्स की आवश्यकता है, तो long का उपयोग करें। यदि 16-बिट सीमा कुछ पुराने प्लेटफॉर्म पर स्वीकार्य है (जो शायद कोई फर्क नहीं पड़ता और आपका कोड शायद कभी संकलित नहीं किया जाएगा) तो यह विशेष रूप से कोई फर्क नहीं पड़ता।

+1

+1। –

+4

मुझे ध्यान रखना चाहिए कि उस आवश्यकता को सी 99 के 'int_leastX_t' प्रकारों से भी संतुष्ट किया जा सकता है, लेकिन कम विश्वसनीय रूप से कुछ कंपेलर सी 99 का समर्थन करते हैं। –

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