मुझे वीएसएनईटी और जीसीसी के लिए मेरा कोड चेतावनी मुक्त होना पसंद है, और मुझे अपना कोड 64-बिट तैयार करना पसंद है।size_t जोड़ों में ओवरफ्लो
आज मैंने एक छोटा मॉड्यूल लिखा जो स्मृति बफर में संबंधित है और फ़ाइल-शैली इंटरफ़ेस के माध्यम से डेटा तक पहुंच प्रदान करता है (उदाहरण के लिए आप बाइट्स पढ़ सकते हैं, बाइट लिख सकते हैं, आसपास की तलाश कर सकते हैं)।
वर्तमान पढ़ने की स्थिति और आकार के डेटा-प्रकार के रूप में मैंने size_t का उपयोग किया क्योंकि यह सबसे प्राकृतिक विकल्प प्रतीत होता है। मैं चेतावनियों के चारों ओर मिलता हूं और इसे 64-बिट में भी काम करना चाहिए।
शायद ज़रुरत पड़े: मेरी संरचना इस तरह दिखता है:
typedef struct
{
unsigned char * m_Data;
size_t m_CurrentReadPosition;
size_t m_DataSize;
} MyMemoryFile;
size_t
की signedness व्यवहार में परिभाषित किया जा करने के लिए नहीं लगता है। एक Google कोड-सर्च ने साबित किया।
अब मैं एक दुविधा में हूं: मैं ओवरफ्लो के लिए size_t
के साथ जोड़ों को देखना चाहता हूं क्योंकि मुझे उपयोगकर्ता द्वारा प्रदान किए गए डेटा से निपटना होगा और तृतीय पक्ष पुस्तकालय मेरे कोड का उपयोग करेंगे। हालांकि, ओवरफ्लो चेक के लिए मुझे साइन-नेस जानना है। यह कार्यान्वयन में एक बड़ा अंतर बनाता है।
तो - कैसे मुझे प्लेटफॉर्म और कंपाइलर स्वतंत्र तरीके से ऐसे कोड को लिखना चाहिए?
क्या मैं size_t
पर हस्ताक्षर या संकलन समय पर हस्ताक्षर की जांच कर सकता हूं? इससे मेरी समस्या हल हो जाएगी। या शायद size_t
पहली जगह में सबसे अच्छा विचार नहीं था।
कोई विचार?
EDIT: मैं सी-भाषा के लिए समाधान ढूंढ रहा हूं!
आप किस जीसीसी का उपयोग कर रहे हैं? ऐसा लगता है कि उन्होंने 2.4 –
समेत संस्करणों में आकारहीन नहीं किया है और जिन संस्करणों के साथ मुझे निपटना है, वे सभी जगह पर हैं। मैं एम्बेडेड प्रोग्रामिंग करता हूं और कभी-कभी मुझे पत्थर-युग से कंपाइलर संस्करणों का उपयोग करना पड़ता है। –
"हस्ताक्षर" सामान्य शब्द है। – Lassi