मैं जीसीसी 4.9 के साथ एम्बेडेड एआरएम प्रोग्रामिंग कर रहा हूं। मैं -Wconversion
स्विच का उपयोग कर रहा हूं क्योंकि यह मेरी कंपनी के डिफ़ॉल्ट देव उपकरण कॉन्फ़िगरेशन में है। मैं stdint.h types (uint8_t, uint32_t, आदि) का उपयोग कर रहा हूं।जीसीसी कंपाइलर चेतावनियों को हटाने के लिए टाइपकास्टिंग का उपयोग
संकलक हर बार जब मैं एक यौगिक असाइनमेंट या यहां तक कि सरल जोड़ करता हूं तो चेतावनियां बनाता है। उदाहरण के लिए:
uint8_t u8 = 0;
uint16_t u16;
// These cause warnings:
u8 += 2;
u8 = u16 >> 8;
"आम तरीका" इसे ठीक करने, के रूप में चर्चा here और here डाले उपयोग करने के लिए है:
u8 = (uint8_t)(u8 + 2);
u8 = (uint8_t)(u16 >> 8);
इस बदसूरत होने के अलावा, मैं ठोस सबूत में प्रदर्शन जारी रहे कि कास्टिंग आम तौर पर खराब अभ्यास है।
मेरे सवालों का:
- क्यों यह इस तरह से typecasts उपयोग करने के लिए बुरा है?
- क्या मैं
-Wconversion
को छोड़कर और संकलक को मेरे लिए निहित रूपांतरण देने से कुछ भी खो देता हूं?
इस मामले में टाइपकास्टिंग के बारे में कुछ भी बुरा नहीं है। यदि कुछ भी हो, तो यह दिखाता है कि आपने अर्थशास्त्र, लपेटने के आसपास अंकगणित, छिड़काव आदि माना है - और आप इससे संतुष्ट हैं। –
@ ब्रेटहेल, कम से कम कास्ट * asserts * कि आपने सभी प्रभावों पर विचार किया है और उनसे संतुष्ट हैं। भले ही आपने नहीं किया है, या नहीं। –
@ ब्रेटहेल, यदि आप संभावित गलत कोड के बारे में संकलक को बंद करने के बारे में अधिक परवाह करते हैं तो आप वहां कास्ट डाल सकते हैं (स्कॉफ न करें - ऐसा होता है)। यदि आप सोचते हैं कि आपने सभी प्रभावों पर विचार किया है, तो आप यह भी कर सकते हैं, लेकिन आप गलत हैं। या यहां तक कि अगर आप किसी भी बेहतर नहीं जानते हैं। मैं मानता हूं कि कास्टिंग स्वाभाविक रूप से नहीं है, जरूरी * बुरा * है, लेकिन पहली जगह में डालने की आवश्यकता से बचने के लिए * बेहतर * है। –