क्या जीसीसी के लिए कोई ध्वज है कि लंबे समय से एक छोटे से रूपांतरण डेटा के संभावित नुकसान के बारे में चेतावनी उत्पन्न करेगा?क्या विजुअल स्टूडियो के डेटा की संभावित हानि के संबंध में एक जीसीसी 4.2 चेतावनी है?
मैं एक सी ++ एप्लिकेशन पर काम कर रहा हूं जो विजुअल स्टूडियो (2005) और जीसीसी 4.2 (मैक ओएस एक्स के लिए) दोनों के लिए संकलित है।
चेतावनी है कि दृश्य स्टूडियो प्रिंट बाहर इस पैटर्न का पालन करें:
: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data
मैं -Wconversion की कोशिश की है, लेकिन यह नहीं है कि मैं के लिए काफी क्या देख रहा हूँ। एकमात्र चीज जिसे मैं अब तक ढूंढने में सक्षम हूं, एक प्रयोगात्मक झंडा है, -कॉकर्शन, जो जीसीसी 4.3 से जुड़ा हुआ है (जो मुझे यकीन नहीं है कि हम अभी तक निवेश करना चाहते हैं)।
अप्रैल 22, 200 9 @ 11:00 ईएसटी संपादित करें: स्पष्ट करने के लिए, मैं उस चेतावनी को देखना चाहता हूं। हमारे पास कोड है जहां हम जानना चाहते हैं कि डेटा हानि कब होगी। अगर मैं कोड है:
मान 1: 2147483647
मान 2: 65535
हमारे कोड में, हम विशेष है
unsigned long value1 = LONG_MAX;
std::cout << "value1: " << value1 << std::endl;
unsigned short value2 = value1;
std::cout << "value2: " << value2 << std::endl;
मैं इस उम्मीद परिणाम प्राप्त आवेषण उस स्थान पर डालते हैं जो मजबूती का प्रदर्शन करता है और हमें चेतावनी देता है कि निष्पादित कोड के परिणामस्वरूप डेटा का नुकसान होगा। हमने विजुअल स्टूडियो की चेतावनियों का उपयोग करके हमारे बड़े कोड बेस में जगहें पाईं।
क्या कोई तरीका है कि हम जीसीसी 4.2 में इन चेतावनियों को उत्पन्न कर सकते हैं?
संभावित डेटा हानि सत्यापन के लिए '-Wshorten-64-to-32' आज़माएं। '-Wconversion' भी हस्ताक्षर त्रुटियों की जांच करेगा (अधिक हो सकता है)। – rustyx
'-Wshorten-64-to-32' GCC द्वारा स्वीकार नहीं किया जाता है, केवल क्लैंग द्वारा। – Andy