दशमलव पूर्णांक स्थिरांक के प्रकारों के नियम आईएसओ सी मानक के 1 99 0 और 1 999 संस्करणों के बीच बदल गए।
1 99 0 संस्करण में, एक असफल दशमलव पूर्णांक निरंतर प्रकार int
, long int
, या unsigned long int
का पहला भाग है जिसमें इसका मूल्य प्रदर्शित किया जा सकता है। (सीया unsigned long long
प्रकार नहीं था)।
1 999 और 2011 के संस्करणों में, इसका प्रकार int
, long int
, long long int
में से एक है; यह किसी भी हस्ताक्षरित प्रकार का कभी नहीं है।
एक विशेष निरंतर प्रकार (जैसे 2147483648
) आपके द्वारा उपयोग किए जा रहे कंपाइलर के पूर्णांक प्रकारों की श्रेणियों के आधार पर अलग-अलग होगा। अपने संकलक के long
प्रकार 32 बिट होने वाला है, तो 2147483648
अपने संकलक C90 नियमों का उपयोग करता है, या के प्रकार long long
अगर अगर यह सी 11 नियमों का उपयोग करता है (long long
कम से कम 64 बिट्स होने की गारंटी है) प्रकार unsigned long
का हो जाएगा। संकलक आपको इसके बारे में चेतावनी दे रहा है।
आप निरंतर प्रकार निर्दिष्ट करने के लिए प्रत्यय जोड़ सकते हैं - लेकिन सादे हस्ताक्षरित int
के लिए कोई प्रत्यय नहीं है। आप unsigned int
, L
long
, UL
के लिए बिना हस्ताक्षर किए लंबे, और आगे के लिए जोड़ सकते हैं।
यह ध्यान रखना महत्वपूर्ण है कि -2147483648
एक पूर्णांक निरंतर नहीं है; बल्कि 2147483648
स्वयं एक पूर्णांक स्थिर है, और -2147483648
एक अभिव्यक्ति है जो उस निरंतर शून्य यूनिट ऑपरेटर को लागू करती है।C90 नियमों के तहत, अगर लगातार प्रकार unsigned long
की है, कि एक अहस्ताक्षरित एकल शून्य से है, जो अहस्ताक्षरित गणित के नियमों के तहत मूल्य 2147483648
पैदावार है। C99 या C11 नियमों के तहत, 2147483648
प्रकार के होने की संभावना है (हस्ताक्षरित) long long
, और यह negating -2147483648
पैदावार भी प्रकार long long
की।
कभी-कभी आपको कोड (-2147483647 - 1)
का उपयोग करता है इस समस्या से बचने के लिए दिखाई देगा; एक 32-बिट int
दिया, 2147483647
प्रकार int
की है और अभिव्यक्ति की परिणाम अतिप्रवाह बिना उम्मीद int
मूल्य अर्जित करता है।
बेशक अगर आपके संकलक पूर्णांक प्रकार के लिए अलग अलग आकार है, इस और भी जटिल हो सकता है।
C90 'लंबे long' प्रकार है, जो कारण है कि यह C99 की तुलना में अलग तरह की संख्या संभालती है नहीं है। – Lindydancer
एफवाईआई: सही उत्तर यहां पाया गया है: http://stackoverflow.com/questions/2347936/cant-get-rid-of-this-decimal-constant-is-unsigned-only-in-iso-c90- चेतावनी – natersoz