2009-04-21 5 views
5

क्या जीसीसी के लिए कोई ध्वज है कि लंबे समय से एक छोटे से रूपांतरण डेटा के संभावित नुकसान के बारे में चेतावनी उत्पन्न करेगा?क्या विजुअल स्टूडियो के डेटा की संभावित हानि के संबंध में एक जीसीसी 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 में इन चेतावनियों को उत्पन्न कर सकते हैं?

उत्तर

4

यह सुविधा जीसीसी 4.2 में समर्थित नहीं है, लेकिन यह जीसीसी 4.3 में जोड़ा गया है। Wiki page explaining it

स्केनेडर और इवान टेरन के लिए धन्यवाद जो मुझे वहां लाने वाले लिंक प्रदान करने के लिए धन्यवाद।

+1

संभावित डेटा हानि सत्यापन के लिए '-Wshorten-64-to-32' आज़माएं। '-Wconversion' भी हस्ताक्षर त्रुटियों की जांच करेगा (अधिक हो सकता है)। – rustyx

+0

'-Wshorten-64-to-32' GCC द्वारा स्वीकार नहीं किया जाता है, केवल क्लैंग द्वारा। – Andy

4

इस GCC bug entry पर देखें, शायद यह समझने में मदद करता है कि क्यों लंबे समय से छोटे से परिवर्तित करने से चेतावनी नहीं होती है।

+3

अभी तक बेहतर है, उस बग प्रविष्टि में दिए गए लिंक का पालन करें: http://gcc.gnu.org/wiki/Wcoercion –

+0

यह वास्तव में मेरे प्रश्न का उत्तर नहीं दे रहा है। लेकिन देखने के लिए धन्यवाद। –

4

उपयोग -Wconversion। अगर आपको पहले से ही निर्दिष्ट किया गया है तो आपको इसकी आवश्यकता होती है।

यह निश्चित रूप से gcc4.3 में काम करता है। यदि इसे संस्करण 4.2 द्वारा तय नहीं किया गया था, तो आपको इसे प्राप्त करने के लिए अपग्रेड करना होगा।

उदाहरण चेतावनी:

warning: conversion to 'short int' from 'int' may alter its value 
संबंधित मुद्दे