निम्नलिखित उदाहरण पर विचार सीमित करने के लिए:-Wtype सीमा एक अहस्ताक्षरित पूर्णांक
unsigned short c = // ...
if (c > 0xfffful)
c = 0xfffful;
unsigned short
के बाद से वास्तव में 16 बिट से भी बड़ा हो सकता है, मैं एक के लिए हेक्स प्रारूप में snprintf
यह पहले मूल्य को सीमित करना चाहते निश्चित आकार बफर।
हालांकि, जीसीसी (लेकिन झुकाव नहीं) चेतावनी देता है: comparison is always false due to limited range of data type [-Wtype-limits]
।
क्या यह जीसीसी में एक बग है या मुझे कुछ याद आया? मैं समझता हूं कि मेरी मशीन unsigned short
बिल्कुल 16 बिट्स है, लेकिन यह अन्य प्लेटफॉर्म पर होने की गारंटी नहीं है।
@WhiZTiM: हाँ, यह सवाल का आधार है। अब ओपी एक ही कोड को एक मंच पर ले जाता है जहां 'std :: uint_least16_t' 16 बिट्स से अधिक है। क्या होता है? –
मैंने व्याकुलता से बचने के लिए 'unsd :: uint_least16_t' को 'unsigned short' के साथ बदल दिया है (समस्या विशेष रूप से 0iरूप में नहीं है)। – danpla
यह निराशाजनक है; मैंने सोचा था कि इससे पहले कि आप जानबूझकर 'std :: uint_least16_t' का उपयोग करें, ताकि आप विशेष रूप से कम से कम 16 बिट्स (निश्चित-चौड़ाई प्रकार के संभावित प्रदर्शन दंड के बिना) का उपयोग कर सकें। एक 'हस्ताक्षरित शॉर्ट' के साथ मैं वास्तव में उस लाभ में नहीं देख सकता जो आप पूछ रहे हैं। ओह अच्छा। –